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

'''

from __future__ import print_function

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 reset_conf, save_conf
        reset_conf()
        save_conf()
