from typing import Dict, Any, Optional
from pydantic import BaseModel
import os


class WinePairingServiceConfig(BaseModel):
    enabled: bool = True

    # OpenAI Configuration
    openai_api_key: str
    wine_pairing_model: str
    vivino_lookup_model: str
    max_tokens: int = 2000
    temperature: float = 0
    timeout: float = 30.0
    max_retries: int = 3
    retry_delay: float = 1.0

    # Features
    vivino_lookup_enabled: bool = True

    @classmethod
    def from_config(cls, config: Dict[str, Any]) -> "WinePairingServiceConfig":
        """Create config from YAML with environment variable resolution"""
        service_config = config["services"]["wine_pairing"]

        # Get API key from environment
        api_key_env = service_config["openai"].get("api_key_env", "OPENAI_API_KEY")
        api_key = os.getenv(api_key_env)
        if not api_key:
            # Fallback to default OPENAI_API_KEY
            api_key = os.getenv("OPENAI_API_KEY")
        if not api_key:
            raise ValueError(f"Environment variable {api_key_env} not set")

        return cls(
            enabled=service_config.get("enabled", True),
            openai_api_key=api_key,
            wine_pairing_model=service_config["openai"]["models"]["wine_pairing"],
            vivino_lookup_model=service_config["openai"]["models"]["vivino_lookup"],
            max_tokens=service_config["openai"].get("max_tokens", 2000),
            temperature=service_config["openai"].get("temperature", 0),
            timeout=service_config["openai"].get("timeout", 30.0),
            max_retries=service_config["openai"].get("max_retries", 3),
            retry_delay=service_config["openai"].get("retry_delay", 1.0),
            vivino_lookup_enabled=service_config.get("features", {}).get("vivino_lookup", True)
        )
