#!/usr/bin/env python3

import argparse
import multiprocessing as mp
import logging

from os.path import join as join_path
from ucloud.sanity_checks import check

if __name__ == "__main__":
    arg_parser = argparse.ArgumentParser(prog='ucloud',
                                         description='Open Source Cloud Management Software')
    arg_parser.add_argument('component',
                            choices=['api', 'scheduler', 'host',
                                     'filescanner', 'imagescanner',
                                     'metadata'])
    arg_parser.add_argument('component_args', nargs='*')
    args = arg_parser.parse_args()

    logging.basicConfig(
        level=logging.DEBUG,
        filename=join_path("/", "etc", "ucloud", "log.txt"),
        filemode="a",
        format="%(name)s %(asctime)s: %(levelname)s - %(message)s",
        datefmt="%d-%b-%y %H:%M:%S",
    )
    try:
        check()

        if args.component == 'api':
            from ucloud.api.main import main

            main()
        elif args.component == 'host':
            from ucloud.host.main import main

            hostname = args.component_args
            mp.set_start_method('spawn')
            main(*hostname)
        elif args.component == 'scheduler':
            from ucloud.scheduler.main import main

            main()
        elif args.component == 'filescanner':
            from ucloud.filescanner.main import main

            main()
        elif args.component == 'imagescanner':
            from ucloud.imagescanner.main import main

            main()
        elif args.component == 'metadata':
            from ucloud.metadata.main import main

            main()

    except Exception as e:
        logging.exception(e)
        print(e)