"""Shared settings for API and Worker services."""

import os
from typing import Optional

from pydantic_settings import BaseSettings, SettingsConfigDict


class SharedSettings(BaseSettings):
    """Settings shared between API and Worker services."""

    # Database
    database_url: str = "postgresql+psycopg://postgres:postgres@localhost:5432/xiaoxia_saas"
    database_pool_size: int = 20
    database_max_overflow: int = 40
    database_pool_timeout: int = 30
    database_pool_recycle: int = 3600

    # Redis
    redis_url: str = "redis://localhost:6379/0"

    # Celery
    celery_broker_url: str = "redis://localhost:6379/0"
    celery_result_backend: str = "redis://localhost:6379/1"

    # OSS Aliyun
    oss_endpoint: str = "oss-cn-hangzhou.aliiyuncs.com"
    oss_access_key_id: str = ""
    oss_access_key_secret: str = ""
    oss_bucket_name: str = "xiaoxia-autocut"

    # CosyVoice (阿里云语音合成)
    cosyvoice_api_key: str = ""
    cosyvoice_base_url: str = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text2audio"
    cosyvoice_model: str = "cosyvoice-v1"
    cosyvoice_voice: str = "longxiaochun"  # 默认音色
    cosyvoice_sample_rate: int = 22050
    cosyvoice_format: str = "mp3"  # 输出格式：mp3/wav/pcm

    # Environment
    environment: str = "development"
    auto_create_schema: bool = False

    model_config = SettingsConfigDict(
        env_file=".env",
        env_file_encoding="utf-8",
        case_sensitive=False,
        extra="ignore",
    )


_settings: Optional[SharedSettings] = None


def get_shared_settings() -> SharedSettings:
    """Get shared settings instance (global singleton)."""
    global _settings
    if _settings is None:
        env = os.getenv("APP_ENV", "development")
        env_file = f".env.{env}" if env != "development" else ".env"
        if os.path.exists(env_file):
            _settings = SharedSettings(_env_file=env_file)
        else:
            _settings = SharedSettings()
    return _settings
