#!python

import os
import sys

from collections import defaultdict
from argparse import ArgumentParser

from kore import config_factory, container_factory
from kore.configs.exceptions import ConfigPluginNotFoundError

from kore_shell.lib.parsers import KVParser


def merge_dict(*dicts):
    d = defaultdict(dict)
    for dd in dicts:
        for k, v in dd.items():
            d[k].update(v)
    return d

name = os.path.basename(sys.argv[0])

parser = ArgumentParser(name)

parser.add_argument('--config-type', default='dict')
parser.add_argument('--config-opt', type=KVParser().parse,
                    action='append', default=[])

arguments = parser.parse_args()

config_type = arguments.config_type
config_opt = merge_dict(*arguments.config_opt)

try:
    config = config_factory.create(config_type, **config_opt)
except ConfigPluginNotFoundError as e:
    exit(e)

container = container_factory.create(config=config)

app = container('kore.components.flask.application')
app.run()
