# -----------------------------------------------------------------------------
# Copyright (c) 2012 - 2018, Anaconda, Inc. and Intake contributors
# All rights reserved.
#
# The full license is in the LICENSE file, distributed with this software.
# -----------------------------------------------------------------------------
"""

"""

import logging

log = logging.getLogger(__name__)

# -----------------------------------------------------------------------------
# Imports
# -----------------------------------------------------------------------------

# Standard library imports
import os

# External imports
import yaml

# Intake imports
from intake.cli.util import Subcommand

# -----------------------------------------------------------------------------
# API
# -----------------------------------------------------------------------------


class Config(Subcommand):
    """Configuration functions"""

    name = "config"

    def initialize(self):
        sub_parser = self.parser.add_subparsers()

        list = sub_parser.add_parser("list-defaults", help="Show all builtin defaults")
        list.set_defaults(invoke=self._list_defaults)

        conf_reset = sub_parser.add_parser("reset", help="Set config file to defaults")
        conf_reset.set_defaults(invoke=self._reset)

        conf_info = sub_parser.add_parser("info", help="Show config settings")
        conf_info.set_defaults(invoke=self._info)

        conf_get = sub_parser.add_parser("get", help="Get current config, specific key or all")
        conf_get.add_argument("key", type=str, help="Key in config dictionary", nargs="?")
        conf_get.set_defaults(invoke=self._get)

    def invoke(self, args):
        self.parser.print_help()

    def _get(self, args):
        from intake.config import conf

        if args.key:
            print(conf[args.key])
        else:
            print(yaml.dump(conf, default_flow_style=False))

    def _info(self, args):
        from intake.config import cfile

        if "INTAKE_CONF_DIR" in os.environ:
            print("INTAKE_CONF_DIR: ", os.environ["INTAKE_CONF_DIR"])
        if "INTAKE_CONF_FILE" in os.environ:
            print("INTAKE_CONF_FILE: ", os.environ["INTAKE_CONF_FILE"])
        ex = "" if os.path.isfile(cfile()) else "(does not exist)"
        print("Using: ", cfile(), ex)

    def _list_defaults(self, args):
        from intake.config import defaults

        print(yaml.dump(defaults, default_flow_style=False))

    def _reset(self, args):
        from intake.config import conf

        conf.reset()
        conf.save()
