"""全局配置，从 .env 文件读取"""
from pydantic_settings import BaseSettings
from functools import lru_cache


class Settings(BaseSettings):
    # 应用
    APP_ENV: str = "development"
    SECRET_KEY: str = "change-me"
    DEBUG: bool = True

    # MySQL
    DB_HOST: str = "localhost"
    DB_PORT: int = 3306
    DB_NAME: str = "sme_omnistore"
    DB_USER: str = "sme_user"
    DB_PASSWORD: str = "sme_pass123"
    DB_POOL_SIZE: int = 10
    DB_MAX_OVERFLOW: int = 20

    # Redis
    REDIS_HOST: str = "localhost"
    REDIS_PORT: int = 6379
    REDIS_DB: int = 0
    REDIS_PASSWORD: str = ""

    # 初始租户（install.py 使用）
    INIT_TENANT_NAME: str = "SME Demo Store"
    INIT_TENANT_DOMAIN: str = "localhost"
    INIT_ADMIN_EMAIL: str = "admin@example.com"
    INIT_ADMIN_PASSWORD: str = "Admin@2026!"
    ADMIN_CORS_ORIGINS: str = "http://192.168.50.139:3001,http://localhost:3001"
    API_BASE_URL: str = "http://192.168.50.139:8000"

    @property
    def DATABASE_URL(self) -> str:
        """异步连接串（aiomysql）"""
        return (
            f"mysql+aiomysql://{self.DB_USER}:{self.DB_PASSWORD}"
            f"@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
            f"?charset=utf8mb4"
        )

    @property
    def DATABASE_URL_SYNC(self) -> str:
        """同步连接串（pymysql，用于 Alembic / install.py）"""
        return (
            f"mysql+pymysql://{self.DB_USER}:{self.DB_PASSWORD}"
            f"@{self.DB_HOST}:{self.DB_PORT}/{self.DB_NAME}"
            f"?charset=utf8mb4"
        )

    @property
    def REDIS_URL(self) -> str:
        if self.REDIS_PASSWORD:
            return f"redis://:{self.REDIS_PASSWORD}@{self.REDIS_HOST}:{self.REDIS_PORT}/{self.REDIS_DB}"
        return f"redis://{self.REDIS_HOST}:{self.REDIS_PORT}/{self.REDIS_DB}"

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"
        extra = "ignore"


@lru_cache()
def get_settings() -> Settings:
    return Settings()


settings = get_settings()
