import pytest

from app.services.create_restaurant_offer.config import CreateRestaurantOfferServiceConfig
from app.services.create_restaurant_offer.models.requests import CreateRestaurantOfferRequest
from app.services.create_restaurant_offer.service import CreateRestaurantOfferService
from app.services.create_restaurant_offer import service as service_module


@pytest.mark.anyio("asyncio")
async def test_translate_offer_content_passes_analytics_context(monkeypatch):
    captured = {}

    async def fake_json_completion(**kwargs):
        captured["analytics_context"] = kwargs.get("analytics_context")
        return {
            "occasion": "Happy Hour",
            "offer_items": "Wine __PRICE0__",
        }, {"input_tokens": 1, "output_tokens": 1, "cost": 0.0, "model": kwargs["model"]}

    monkeypatch.setattr(service_module.openai_client, "json_completion", fake_json_completion)

    config = CreateRestaurantOfferServiceConfig(
        enabled=True,
        bearer_token=None,
        openai_api_key="test-key",
        create_restaurant_offer_model="gpt-image-1",
        translation_model="gpt-4o-mini",
        timeout=30.0,
        image_size="1024x1536",
        image_quality="high",
        menues_root_dir="menues",
        menues_url_prefix="/menues",
    )
    service = CreateRestaurantOfferService(config)

    request = CreateRestaurantOfferRequest(
        offer_id="3054",
        occasion="Happy Hour",
        offer_items="Wine €9.99",
        logo_image_url="https://example.com/logo.png",
        target_language="bg",
        city="sofia",
        zavedenia_id=3054,
    )

    await service._translate_offer_content(
        occasion=request.occasion,
        offer_items=request.offer_items,
        target_language=request.target_language,
        city=request.city,
        zavedenia_id=request.zavedenia_id,
    )

    assert captured["analytics_context"]["zavedenia_id"] == 3054
    assert captured["analytics_context"]["city"] == "sofia"
    assert captured["analytics_context"]["data_input"]["app_service"] == "create_restaurant_offer"
    assert captured["analytics_context"]["data_input"]["target_language"] == "bg"
