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


class AllergenConfig(BaseModel):
    number: int
    name: str


class TranslationServiceConfig(BaseModel):
    enabled: bool = True

    # OpenAI Configuration
    openai_api_key: str
    translation_model: str
    allergen_model: str
    max_tokens: int = 1800
    temperature: float = 0
    timeout: float = 20.0
    max_retries: int = 3
    retry_delay: float = 1.0

    # Service Configuration
    max_concurrent_requests: int = 10
    chunk_size: int = 5
    request_timeout: float = 30.0
    supported_languages: List[str]
    allergens: List[AllergenConfig]

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

        # 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:
            raise ValueError(f"Environment variable {api_key_env} not set")

        return cls(
            enabled=service_config.get("enabled", True),
            openai_api_key=api_key,
            translation_model=service_config["openai"]["models"]["translation"],
            allergen_model=service_config["openai"]["models"]["allergens"],
            max_tokens=service_config["openai"].get("max_tokens", 1800),
            temperature=service_config["openai"].get("temperature", 0),
            timeout=service_config["openai"].get("timeout", 20.0),
            max_retries=service_config["openai"].get("max_retries", 3),
            retry_delay=service_config["openai"].get("retry_delay", 1.0),
            max_concurrent_requests=service_config["concurrency"]["max_concurrent_requests"],
            chunk_size=service_config["concurrency"].get("chunk_size", 5),
            request_timeout=service_config["concurrency"].get("request_timeout", 30.0),
            supported_languages=service_config["languages"]["supported"],
            allergens=[AllergenConfig(**a) for a in service_config["allergens"]]
        )
