from pyhocon import ConfigTree

import six
from clearml_agent.helper.base import Singleton


@six.add_metaclass(Singleton)
class Config(object):

    def __init__(self, tree=None):
        self.__dict__['_tree'] = tree or ConfigTree()

    def __getitem__(self, item):
        return self._tree[item]

    def __setitem__(self, key, value):
        return self._tree.__setitem__(key, value)

    def new(self, name):
        return self._tree.setdefault(name, ConfigTree())

    __getattr__ = __getitem__
    __setattr__ = __setitem__


def get_config(name=None):
    config = Config()
    if name:
        return getattr(config, name)
    return config


def make_config(name):
    return get_config().new(name)