from __future__ import annotations
from typing import TypeVar
import toml

class Config:
    values: dict = {}

    @staticmethod
    def load_config(file):
        with open(file, "r", encoding="utf-8") as f:
            Config.values = toml.load(f)

    @staticmethod
    def get(key: str, default=None, type=None, empty_is_none=False):
        key_path = key.split(".")
        value = Config.values
        for k in key_path:
            if k in value:
                value = value[k]
            else:
                return default
            
        if empty_is_none and value == "":
            return None

        if type == bool:
            if isinstance(value, bool):
                return value
            elif isinstance(value, int) or isinstance(value, float):
                return value != 0
            else:
                return str(value).lower() in ("yes", "true", "1")
        elif type == int:
            return int(value)
        elif type == float:
            return float(value)
        elif type == str:
            return str(value)
        elif type == list:
            if not isinstance(value, list):
                return []
        elif type == dict:
            if not isinstance(value, dict):
                return {}
        else:
            return value

    @staticmethod
    def set(key: str, value):
        key_path = key.split(".")
        obj = Config.values
        for k in key_path[:-1]:
            if k not in obj:
                obj[k] = {}
            obj = obj[k]
        obj[key_path[-1]] = value