from fastapi import APIRouter, Depends
import structlog

from .models.requests import GenerateAiImageRequest
from ...shared.middleware.auth import verify_generate_ai_image_auth

router = APIRouter(prefix="/generate-ai-image", tags=["generate_ai_image"])
logger = structlog.get_logger("generate_ai_image.routes")

generate_ai_image_service = None
VERSION = "1.0.0"


def set_generate_ai_image_service(service):
    """Set the generate_ai_image service instance."""
    global generate_ai_image_service
    generate_ai_image_service = service


@router.post("/create", dependencies=[Depends(verify_generate_ai_image_auth)])
async def generate_ai_image(request: GenerateAiImageRequest):
    """Generate an AI image through the OpenAI Responses API."""
    logger.info(
        "generate_ai_image_request",
        model=request.selected_model,
        mock_data=request.mock_data,
        logo_url_present=bool(request.logo_image_url.strip()),
        reference_image_count=len(request.reference_image_urls),
    )

    result = await generate_ai_image_service.generate_ai_image(request)

    logger.info(
        "generate_ai_image_response",
        model=result["model"],
        total_tokens=result["total_tokens"],
        price_usd=result["price_usd"],
        mock=request.mock_data,
    )

    return {
        "image_base64": result["image_base64"],
        "model": result["model"],
        "response_id": result["response_id"],
        "tokens": {
            "input": result["input_tokens"],
            "cached": result["cached_tokens"],
            "output": result["output_tokens"],
            "reasoning": result["reasoning_tokens"],
            "total": result["total_tokens"],
        },
        "price_usd": result["price_usd"],
        "version": VERSION,
    }
