import os
from pathlib import Path
from dotenv import load_dotenv


class EnvConfig:
    _instance = None

    def __new__(cls):
        if cls._instance is None:
            cls._instance = super(EnvConfig, cls).__new__(cls)
            cls._instance._initialized = False
        return cls._instance

    def __init__(self):
        if self._initialized:
            return

        self._initialized = True
        self.ROOT_DIR = Path(__file__).parent.parent.parent.parent
        self.load_env()

    def load_env(self):
        env_file = self.ROOT_DIR / ".env"
        if env_file.exists():
            load_dotenv(env_file)

            # 根据ENVIRONMENT变量加载对应的环境文件
            env_type = os.getenv("ENVIRONMENT", "prod")
            if env_type == "dev":
                env_file = self.ROOT_DIR / ".env.dev"
            elif env_type == "prod":
                env_file = self.ROOT_DIR / ".env"

            if env_file.exists():
                load_dotenv(env_file, override=True)

    def get(self, key, default=None):
        return os.getenv(key, default)

    def get_all(self):
        return dict(os.environ)

    def __getattr__(self, name):
        return self.get(name)


# 创建全局实例
env_config = EnvConfig()


# 导出环境变量
def get_env(key, default=None):
    return os.getenv(key, default)


# 导出所有环境变量
def get_all_env():
    return dict(os.environ)
