"""
Configuration centralisée du backend Talk2CV.

Charge les variables d'environnement depuis .env via python-dotenv,
et les expose via un objet `settings` typé.

Usage :
    from app.core.config import settings
    print(settings.GROQ_API_KEY)
"""

import os
from pathlib import Path
from dotenv import load_dotenv

# Localise le fichier .env à la racine du backend
# (3 niveaux au-dessus de ce fichier : core/ -> app/ -> backend/)
BACKEND_ROOT = Path(__file__).resolve().parent.parent.parent
ENV_FILE = BACKEND_ROOT / ".env"

# Charge .env dans os.environ
load_dotenv(ENV_FILE)


class Settings:
    """
    Settings globaux de l'application.
    Lus depuis .env, avec des valeurs par défaut sûres.
    """

    # === API Configuration ===
    API_HOST: str = os.getenv("API_HOST", "0.0.0.0")
    API_PORT: int = int(os.getenv("API_PORT", "8000"))
    ALLOWED_ORIGINS: list[str] = os.getenv("ALLOWED_ORIGINS", "*").split(",")
    LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO")
    ENVIRONMENT: str = os.getenv("ENVIRONMENT", "development")

    # === Groq (transcription + parsing par défaut) ===
    GROQ_API_KEY: str = os.getenv("GROQ_API_KEY", "")
    WHISPER_MODEL: str = os.getenv("WHISPER_MODEL", "whisper-large-v3")
    GROQ_PARSER_MODEL: str = os.getenv("GROQ_PARSER_MODEL", "llama-3.3-70b-versatile")

    # === Anthropic (parsing alternatif) ===
    ANTHROPIC_API_KEY: str = os.getenv("ANTHROPIC_API_KEY", "")
    CLAUDE_MODEL: str = os.getenv("CLAUDE_MODEL", "claude-3-5-haiku-20241022")

    # === OpenAI (parsing alternatif) ===
    OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "")
    OPENAI_MODEL: str = os.getenv("OPENAI_MODEL", "gpt-4o-mini")

    # === Gemini (transcription alternative) ===
    GEMINI_API_KEY: str = os.getenv("GEMINI_API_KEY", "")

    # === Parser provider switch ===
    # Options : 'groq' | 'anthropic' | 'openai'
    LLM_PARSER: str = os.getenv("LLM_PARSER", "groq")

    # 🆕 Supabase (Phase 1.2)
    SUPABASE_URL: str = os.getenv("SUPABASE_URL", "")
    SUPABASE_PUBLISHABLE_KEY: str = os.getenv("SUPABASE_PUBLISHABLE_KEY", "")
    SUPABASE_SECRET_KEY: str = os.getenv("SUPABASE_SECRET_KEY", "")

    # === Supabase Storage (Phase 1.5) ===
    SUPABASE_CVS_BUCKET: str = os.getenv("SUPABASE_CVS_BUCKET", "cvs")
    SUPABASE_AUDIOS_BUCKET: str = os.getenv("SUPABASE_AUDIOS_BUCKET", "audios")
    SIGNED_URL_TTL_SECONDS: int = int(os.getenv("SIGNED_URL_TTL_SECONDS", "3600"))

    @property
    def is_development(self) -> bool:
        """True si on est en environnement de dev."""
        return self.ENVIRONMENT == "development"

    @property
    def is_production(self) -> bool:
        """True si on est en environnement de prod."""
        return self.ENVIRONMENT == "production"


# Instance globale unique - importée partout dans l'app
settings = Settings()

# ----------------------------------------------------------------------------
# Deeplink URLs (custom scheme talk2cv://, Android intent-filter)
# ----------------------------------------------------------------------------
# Passed to Supabase as `redirect_to` so the confirmation/reset email links
# open the mobile app directly via Android intent-filter (B.1.c + C).
#
# Future migration to App Links HTTPS (V2): change these to
# https://talk2cv.ma/email-confirm and https://talk2cv.ma/reset-password
# without touching auth_service.py.
DEEPLINK_EMAIL_CONFIRM = "talk2cv://email-confirm"
DEEPLINK_RESET_PASSWORD = "talk2cv://reset-password"