#!/usr/bin/env python3
"""Main script to launch the ZeroFS file system."""

import argparse
import logging
import os

from fuse import FUSE

from zerofs import ZeroFS

if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  parser.add_argument('mount')
  parser.add_argument(
      '--bucket', type=str, required=True, help='The B2 bucket to mount')
  parser.add_argument(
      '--background', action='store_true', help='Run in the background')
  parser.add_argument(
      '--cache-dir',
      type=str,
      help='Cache directory to use',
      default='~/.zerofs')
  parser.add_argument(
      '--cache-size', type=int, help='Disk cache size in MB', default=5000)
  parser.add_argument('--log-file', type=str, help='File to log to', default='')
  parser.add_argument(
      '--num_workers',
      type=int,
      help='Num thread workers for uploads',
      default=10)
  parser.add_argument(
      '--upload_delay',
      type=float,
      help='Delay in seconds before writing to object store',
      default=5.0)
  parser.add_argument(
      '--update_period',
      type=float,
      help='Period (s) at which to update directory contents',
      default=0.0)
  parser.add_argument('--verbose', action='store_true', help='Log debug info')
  args = parser.parse_args()

  if args.verbose:
    logging.basicConfig(level=logging.INFO)

  if args.log_file:
    logging.basicConfig(
        filename=args.log_file, filemode='w', level=logging.INFO)

  cache_dir = os.path.expanduser(args.cache_dir)
  fuse = FUSE(
      ZeroFS(
          args.bucket,
          cache_dir=cache_dir,
          cache_size=args.cache_size,
          upload_delay=args.upload_delay,
          update_period=args.update_period,
          num_workers=args.num_workers),
      args.mount,
      foreground=not args.background,
      allow_other=True)
