import argparse
import sys
import os

from ucloud.settings import settings
from ucloud.shared import shared


def update_config(section, kwargs):
    uncloud_config = shared.etcd_client.get(settings.config_key, value_in_json=True)
    if not uncloud_config:
        uncloud_config = {}
    else:
        uncloud_config = uncloud_config.value
    
    uncloud_config[section] = kwargs
    shared.etcd_client.put(settings.config_key, uncloud_config, value_in_json=True)


def configure_parser(parser):
    configure_subparsers = parser.add_subparsers(dest="subcommand")
    
    otp_parser = configure_subparsers.add_parser("otp")
    otp_parser.add_argument("--verification-controller-url",
                            required=True, metavar="URL")
    otp_parser.add_argument("--auth-name", required=True,
                            metavar="OTP-NAME")
    otp_parser.add_argument("--auth-realm", required=True,
                            metavar="OTP-REALM")
    otp_parser.add_argument("--auth-seed", required=True,
                            metavar="OTP-SEED")

    network_parser = configure_subparsers.add_parser("network")
    network_parser.add_argument("--prefix-length", required=True, type=int)
    network_parser.add_argument("--prefix", required=True)
    network_parser.add_argument("--vxlan-phy-dev", required=True)

    netbox_parser = configure_subparsers.add_parser("netbox")
    netbox_parser.add_argument("--url", required=True)
    netbox_parser.add_argument("--token", required=True)

    ssh_parser = configure_subparsers.add_parser("ssh")
    ssh_parser.add_argument('--username', default="root")
    ssh_parser.add_argument('--private-key-path',
                            default=os.path.expanduser("~/.ssh/id_rsa"))

    storage_parser = configure_subparsers.add_parser("storage")
    storage_parser.add_argument('--file-dir', required=True)
    storage_parser_subparsers = storage_parser.add_subparsers(dest="storage_backend")
    
    filesystem_storage_parser = storage_parser_subparsers.add_parser("filesystem")
    filesystem_storage_parser.add_argument('--vm-dir', required=True)
    filesystem_storage_parser.add_argument('--image-dir', required=True)

    ceph_storage_parser = storage_parser_subparsers.add_parser("ceph")
    ceph_storage_parser.add_argument('--ceph-vm-pool', required=True)
    ceph_storage_parser.add_argument('--ceph-image-pool', required=True)


def main(**kwargs):
    subcommand = kwargs.pop('subcommand')
    if not subcommand:
        pass
    else:
        update_config(subcommand, kwargs)