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

from ...shared.config.loader import get_env_var


@dataclass
class GenerateAiImageServiceConfig:
    """Configuration for generate_ai_image service."""

    enabled: bool
    bearer_token: Optional[str]
    openai_api_key: str
    generate_ai_image_model: str
    timeout: float
    image_size: str
    image_quality: str

    @classmethod
    def from_config(cls, config: Dict[str, Any]) -> "GenerateAiImageServiceConfig":
        service_config = config["services"].get("generate_ai_image", {})

        if not service_config.get("enabled", False):
            raise ValueError("generate_ai_image 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_CREATE_RESTAURANT_OFFER")
        openai_api_key = os.getenv(api_key_env)
        if not openai_api_key:
            raise ValueError(f"Required environment variable {api_key_env} 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,
            generate_ai_image_model=openai_config.get("models", {}).get("generate_ai_image", "gpt-5.5"),
            timeout=float(openai_config.get("timeout", 600.0)),
            image_size=openai_config.get("size", "1024x1280"),
            image_quality=openai_config.get("quality", "high"),
        )
