"""
Configuration module for the transcription pipeline.
Loads environment variables and defines available models and settings.
"""
import os
from dotenv import load_dotenv
from typing import Literal

load_dotenv()

# === R2 Cloud Storage Config ===
R2_ENDPOINT_URL = os.getenv("R2_ENDPOINT_URL")
R2_BUCKET = os.getenv("R2_BUCKET")
R2_ACCESS_KEY_ID = os.getenv("R2_ACCESS_KEY_ID")
R2_SECRET_ACCESS_KEY = os.getenv("R2_SECRET_ACCESS_KEY")

# === Gemini API Config ===
GEMINI_API_KEY = os.getenv("GEMINI_KEY")

# === Supabase Config ===
SUPABASE_URL = os.getenv("URL")
SUPABASE_ANON_KEY = os.getenv("SUPABASE_ANON")
SUPABASE_ADMIN_KEY = os.getenv("SUPABASE_ADMIN")

# === Available Gemini Models ===
# Models supporting audio transcription
GEMINI_MODELS = {
    "gemini-3-pro-preview": {
        "name": "gemini-3-pro-preview",
        "thinking_levels": ["low", "high"],
        "supports_thinking": True,
        "cost_tier": "premium"
    },
    "gemini-3-flash-preview": {
        "name": "gemini-3-flash-preview",
        "thinking_levels": ["minimal", "low", "medium", "high"],
        "supports_thinking": True,
        "cost_tier": "standard"
    },
    "gemini-2.5-pro": {
        "name": "gemini-2.5-pro",
        "thinking_levels": None,
        "supports_thinking": True,
        "cost_tier": "premium"
    },
    "gemini-2.5-flash": {
        "name": "gemini-2.5-flash",
        "thinking_levels": None,
        "supports_thinking": True,
        "cost_tier": "standard"
    },
    "gemini-2.5-flash-lite": {
        "name": "gemini-2.5-flash-lite",
        "thinking_levels": None,
        "supports_thinking": True,
        "cost_tier": "lite"
    },
    "gemini-2.0-flash": {
        "name": "gemini-2.0-flash",
        "thinking_levels": None,
        "supports_thinking": False,
        "cost_tier": "standard"
    }
}

# Alias mapping for easier usage
MODEL_ALIASES = {
    "gemini-flash-latest": "gemini-3-flash-preview",
    "gemini-flash-lite-latest": "gemini-2.5-flash-lite",
}

# === Default Pipeline Settings ===
DEFAULT_SETTINGS = {
    "max_segment_duration_sec": 10.0,  # Hard limit for segment duration
    "min_segment_duration_sec": 1.0,   # Minimum segment duration
    "default_model": "gemini-3-flash-preview",
    "default_thinking_level": "high",
    "work_dir": "/tmp/maya3_transcribe",
    "output_dir": "./transcriptions"
}

# === Language Mapping (for Supabase language codes) ===
LANGUAGE_MAP = {
    "te": "Telugu",
    "hi": "Hindi",
    "ta": "Tamil",
    "kn": "Kannada",
    "ml": "Malayalam",
    "bn": "Bengali",
    "gu": "Gujarati",
    "mr": "Marathi",
    "pa": "Punjabi",
    "or": "Odia",
    "en": "English",
    "Telugu": "Telugu",
    "Hindi": "Hindi",
}

def get_model_name(model_key: str) -> str:
    """Resolve model alias to actual model name."""
    if model_key in MODEL_ALIASES:
        return MODEL_ALIASES[model_key]
    if model_key in GEMINI_MODELS:
        return model_key
    raise ValueError(f"Unknown model: {model_key}. Available: {list(GEMINI_MODELS.keys()) + list(MODEL_ALIASES.keys())}")
