from fastapi import APIRouter, Depends
import structlog

from .models.requests import BeerPairingRequest
from .models.responses import BeerPairingResponse
from ...shared.middleware.auth import verify_beer_pairing_auth

router = APIRouter(tags=["beer_pairing"])
logger = structlog.get_logger("beer_pairing.routes")

beer_pairing_service = None
VERSION = "2.0.0"


def set_beer_pairing_service(service):
    """Set the beer pairing service instance"""
    global beer_pairing_service
    beer_pairing_service = service


@router.post(
    "/beer-matcher",
    response_model=BeerPairingResponse,
    response_model_exclude_none=True,
    dependencies=[Depends(verify_beer_pairing_auth)]
)
async def match_beers(request: BeerPairingRequest):
    """
    Match beers to food dishes

    BACKWARD COMPATIBLE - Maintains exact same input/output format
    """
    selected_model = request.model.strip() if request.model and request.model.strip() else None
    has_user_prompt = bool((request.user_prompt or "").strip())

    logger.info(
        "beer_matcher_request",
        language=request.language,
        foods=len(request.foods),
        beer_candidates=len(request.beers),
        model=selected_model,
        user_prompt_provided=has_user_prompt
    )

    pairing_result = await beer_pairing_service.match_beers(request)

    response = BeerPairingResponse(
        language=pairing_result["language"],
        results=pairing_result["results"],
        version=VERSION
    )

    logger.info(
        "beer_matcher_response",
        language=response.language,
        foods=len(response.results),
        user_prompt_provided=has_user_prompt
    )

    return response
