from datetime import datetime, timezone

from validation.request_validator import IVTRequest


def adapt_rtb_request(rtb_request):
    """
    Convert an OpenRTB request into the internal IVTRequest format.
    """

    device = rtb_request.get("device", {})
    geo = device.get("geo", {})
    impressions = rtb_request.get("imp", [])

    if not impressions:
        raise ValueError("RTB request must contain at least one impression")

    return IVTRequest(
        event_id=rtb_request.get("id"),
        timestamp=datetime.now(timezone.utc),
        ip=device.get("ip"),
        user_agent=device.get("ua"),
        geo_declared=geo.get("country"),
        geo_ip=geo.get("country"),
        event_type="impression"
    )