#!/usr/bin/env python3

from argparse import ArgumentParser
from rucksack.cli import RucksackCli
import logging
import sys

from rucksack.exceptions import ConfigNotFoundException, UserWantsToQuitException

if __name__ == "__main__":

  parser = ArgumentParser()
  parser.add_argument('--host',
    help='Host to connect to',
    required=True
    )
  parser.add_argument('--config-file',
    help='Configuration file to be used (overrides default config search logic)',
    default=None,
    )
  parser.add_argument('--config-directory',
    help='Configuration directory to be used (overrides default config search logic)',
    default=None
    )
  parser.add_argument('--log-file',
    help='File to send logs to. Logging is disabled by default. Set this flag to enable logging.',
    default=None
    )
  parser.add_argument('--log-level',
    help='Logging level. See Python logger docs for valid level names.',
    default='INFO'
  )

  args = parser.parse_args()

  if args.log_file:
    logger = logging.getLogger('rucksack')
    logger.setLevel(logging.getLevelName(args.log_level.upper()))
    handler = logging.FileHandler(args.log_file)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)

  try:
    RucksackCli(args.host, config_file=args.config_file, config_directory=args.config_directory).start()
  except ConfigNotFoundException as e:
    print(e, file=sys.stderr)
    quit(1)
  except (KeyboardInterrupt, EOFError, UserWantsToQuitException):
    # TODO: really this should be caught in the above class and then propagated so that we can close down the connection
    print('Goodbye!')
    quit()

