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


class BeerPairingServiceConfig(BaseModel):
    enabled: bool = True

    openai_api_key: str
    beer_pairing_model: str
    untappd_lookup_model: str
    max_tokens: int = 2000
    temperature: float = 0
    timeout: float = 30.0
    max_retries: int = 3
    retry_delay: float = 1.0

    untappd_lookup_enabled: bool = True

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

        api_key_env = service_config["openai"].get("api_key_env", "OPENAI_API_KEY")
        api_key = os.getenv(api_key_env) or 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,
            beer_pairing_model=service_config["openai"]["models"]["beer_pairing"],
            untappd_lookup_model=service_config["openai"]["models"]["untappd_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),
            untappd_lookup_enabled=service_config.get("features", {}).get("untappd_lookup", True)
        )
