#!/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('--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,
                     num_workers=args.num_workers),
              args.mount,
              foreground=not args.background,
              allow_other=True)
