from dataclasses import dataclass
from typing import Dict, Any, Optional
import os

from ...shared.config.loader import get_env_var


@dataclass
class CreateRestaurantOfferServiceConfig:
    """Configuration for create_restaurant_offer service"""

    enabled: bool
    bearer_token: Optional[str]
    openai_api_key: str
    create_restaurant_offer_model: str
    translation_model: str
    timeout: float
    image_size: str
    image_quality: str
    menues_root_dir: str
    menues_url_prefix: str

    @classmethod
    def from_config(cls, config: Dict[str, Any]) -> "CreateRestaurantOfferServiceConfig":
        """Create config from loaded YAML configuration"""
        service_config = config["services"].get("create_restaurant_offer", {})

        if not service_config.get("enabled", False):
            raise ValueError("create_restaurant_offer service is not enabled")

        auth_config = service_config.get("auth", {})
        openai_config = service_config.get("openai", {})

        api_key_env = openai_config.get("api_key_env", "OPENAI_API_KEY")
        openai_api_key = os.getenv(api_key_env) or os.getenv("OPENAI_API_KEY")
        if not openai_api_key:
            raise ValueError(f"Required environment variable {api_key_env} or OPENAI_API_KEY is not set")

        return cls(
            enabled=service_config["enabled"],
            bearer_token=get_env_var(
                auth_config.get("bearer_token_env", "CREATE_RESTAURANT_OFFER_SERVICE_KEY"),
                required=False
            ),
            openai_api_key=openai_api_key,
            create_restaurant_offer_model=openai_config.get("models", {}).get("create_restaurant_offer", "gpt-image-1"),
            translation_model=openai_config.get("models", {}).get("translation", "gpt-4o-mini"),
            timeout=float(openai_config.get("timeout", 60.0)),
            image_size=openai_config.get("size", "auto"),
            image_quality=openai_config.get("quality", "high"),
            menues_root_dir=service_config.get("storage", {}).get("root_dir", "menues"),
            menues_url_prefix=service_config.get("storage", {}).get("url_prefix", "/menues"),
        )
