"""
Genesis V2 Configuration
========================
API key loading, model constants, safety settings.
"""

import os
from pathlib import Path
from dataclasses import dataclass

# Import google.genai types FIRST (before any local modules that might shadow package names)
from google.genai import types

# =============================================================================
# MODEL CONFIGURATION (Jan-Feb 2026)
# =============================================================================
# Live API requires native audio model for bidiGenerateContent
LIVE_MODEL = "gemini-2.5-flash-native-audio-latest"

# Vision/Agentic tasks use Gemini 3 Flash with Computer Use (Jan 29, 2026)
VISION_MODEL = "gemini-3-flash-preview"

# Safety settings - permissive for development
SAFETY_OFF = [
    types.SafetySetting(category="HARM_CATEGORY_HATE_SPEECH", threshold="BLOCK_NONE"),
    types.SafetySetting(category="HARM_CATEGORY_HARASSMENT", threshold="BLOCK_NONE"),
    types.SafetySetting(category="HARM_CATEGORY_SEXUALLY_EXPLICIT", threshold="BLOCK_NONE"),
    types.SafetySetting(category="HARM_CATEGORY_DANGEROUS_CONTENT", threshold="BLOCK_NONE"),
]


def get_api_key() -> str:
    """
    Get API key from environment or credentials file.
    Priority: GEMINI_API_KEY > GOOGLE_API_KEY > Credentials file
    """
    key = os.getenv("GEMINI_API_KEY") or os.getenv("GOOGLE_API_KEY")
    if key:
        return key
    
    # Fallback to credentials file
    cred_path = Path(__file__).parent.parent.parent / "Credentials" / "GoogleAIStudio-Gemini-AgileAdapt-API-KEY.txt"
    if cred_path.exists():
        content = cred_path.read_text().strip()
        return content.split("=")[-1].strip() if "=" in content else content
    
    raise ValueError(
        "No API key found. Set GEMINI_API_KEY or GOOGLE_API_KEY environment variable, "
        "or add key to Credentials/GoogleAIStudio-Gemini-AgileAdapt-API-KEY.txt"
    )


@dataclass
class Config:
    """Genesis V2 Configuration container."""
    
    # Paths
    PROJECT_ROOT: Path = Path(__file__).parent.parent.parent
    RULES_DIR: Path = PROJECT_ROOT / ".agent" / "rules"
    CREDENTIALS_DIR: Path = PROJECT_ROOT / "Credentials"
    
    # Models
    live_model: str = LIVE_MODEL
    vision_model: str = VISION_MODEL
    
    # Agent settings
    temperature: float = 0.7
    thinking_budget: int = 2048
    media_resolution: str = "HIGH"
    
    @property
    def api_key(self) -> str:
        return get_api_key()
