#!/usr/bin/python3

import argparse, logging, sys
from karamel.exception import KaramelException
from karamel.command import *
from karamel.logger import logger

__version__ = '0.1.5'
__program__ = 'karamel'
__description__ = 'Karamel is a library let you build powerful Package Manager based on Git and other Version Control System.'


class Karamel(Command):

    def __init__(self):
        super().__init__(__program__, __description__)
        self.add_argument('-v', '--version', help='Show program\'s version number and exit.', action='store_true')
        self.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS, help='Show this help message and exit.')

        package_manager_url = 'https://gitlab.com/karamel/tests/package_manager/raw/master/packages.yml'
        package_install_dir = '~/.karamel'

        self.add_command(SearchCommand(package_manager_url))
        self.add_command(InstallCommand(package_manager_url, package_install_dir))
        self.add_command(UninstallCommand(package_manager_url, package_install_dir))
        self.add_command(UpdateCommand(package_manager_url, package_install_dir))
        self.add_command(ListCommand(package_manager_url, package_install_dir))

    def callback(self, args):
        show_version(args)
        print(self.parser.print_help())
        raise SystemExit(0)


def show_version(args):
    if args.version:
        print('{0} {1}\nPython {2}'.format(__program__, __version__, sys.version))
        raise SystemExit(0)


if __name__ == '__main__':
    try:
        karamel = Karamel()
        karamel.run()
    except KaramelException as e:
        logger.error(e)
    except (KeyboardInterrupt, SystemExit):
        pass
