"""
=========================================
CV6 AI Trading OS
Application Settings
=========================================
"""

from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    """
    CV6 Application Settings
    """

    # =====================================
    # OpenAI
    # =====================================

    OPENAI_API_KEY: str = ""
    OPENAI_MODEL: str = "gpt-5-mini"
    OPENAI_TEMPERATURE: float = 0.2

    # =====================================
    # Claude
    # =====================================

    CLAUDE_API_KEY: str = ""
    CLAUDE_MODEL: str = "claude-3-5-sonnet-latest"

    # =====================================
    # Gemini
    # =====================================

    GEMINI_API_KEY: str = ""
    GEMINI_MODEL: str = "gemini-2.5-pro"

    # =====================================
    # DeepSeek
    # =====================================

    DEEPSEEK_API_KEY: str = ""
    DEEPSEEK_MODEL: str = "deepseek-chat"

    # =====================================
    # Ollama
    # =====================================

    OLLAMA_URL: str = "http://localhost:11434"
    OLLAMA_MODEL: str = "llama3.1:8b"

    # =====================================
    # General AI
    # =====================================

    DEFAULT_AI: str = "gpt"

    AI_TIMEOUT: int = 60

    MAX_TOKENS: int = 2048

    model_config = SettingsConfigDict(
        env_file=".env",
        extra="ignore"
    )

    # =====================================
    # Groq
    # =====================================

    GROQ_API_KEY: str = ""

    # =====================================
    # Angel One
    # =====================================

    ANGEL_API_KEY: str = ""
    ANGEL_CLIENT_ID: str = ""
    ANGEL_PIN: str = ""
    ANGEL_TOTP_SECRET: str = ""

    # =====================================
    # MStock (Mirae Asset Securities India)
    # =====================================

    MSTOCK_API_KEY: str = ""
    MSTOCK_SECRET: str = ""
    MSTOCK_CLIENT_ID: str = ""

    # =====================================
    # Anthropic / Claude (alias support)
    # =====================================

    ANTHROPIC_API_KEY: str = ""   # .env may use ANTHROPIC_API_KEY

    @property
    def effective_claude_key(self) -> str:
        """Return whichever Claude key is set."""
        return self.CLAUDE_API_KEY or self.ANTHROPIC_API_KEY

settings = Settings()
