"""Vyhledávací metody: výdejní místa, našeptávač adres, routing, tisková data.""" from typing import Any from fastapi import APIRouter, Depends, Query from ..cpl_client import cpl_request, relay_binary, relay_json from ..credentials import Credentials, get_credentials router = APIRouter(tags=["lookups"]) @router.get("/access-points", summary="Seznam výdejních míst (ParcelShop/ParcelBox/AlzaBox)") async def access_points( country_code: str = Query(..., alias="countryCode", description="Kód země, např. CZ."), limit: int = Query(default=100, ge=1, le=1000), offset: int = Query(default=0, ge=0), access_point_code: str | None = Query(default=None, alias="accessPointCode"), zip_code: str | None = Query(default=None, alias="zipCode"), city: str | None = Query(default=None), access_point_types: list[str] | None = Query( default=None, alias="accessPointTypes", description="ParcelShop, ParcelBox, AlzaBox.", ), latitude: float | None = Query(default=None), longitude: float | None = Query(default=None), radius: float | None = Query(default=None, description="Poloměr hledání v km."), pickup_enabled: bool | None = Query(default=None, alias="pickupEnabled"), active_card_payment: bool | None = Query(default=None, alias="activeCardPayment"), active_cash_payment: bool | None = Query(default=None, alias="activeCashPayment"), sizes: list[str] | None = Query(default=None, description="S, M, L, XL."), creds: Credentials = Depends(get_credentials), ): """`GET accessPoint` — výdejní místa vč. otevírací doby, GPS a kapacit.""" params: dict[str, Any] = { "CountryCode": country_code, "Limit": limit, "Offset": offset, } if access_point_code: params["AccessPointCode"] = access_point_code if zip_code: params["ZipCode"] = zip_code if city: params["City"] = city if access_point_types: params["AccessPointTypes"] = access_point_types if latitude is not None: params["Latitude"] = latitude if longitude is not None: params["Longitude"] = longitude if radius is not None: params["Radius"] = radius if pickup_enabled is not None: params["PickupEnabled"] = pickup_enabled if active_card_payment is not None: params["ActiveCardPayment"] = active_card_payment if active_cash_payment is not None: params["ActiveCashPayment"] = active_cash_payment if sizes: params["Sizes"] = sizes resp = await cpl_request(creds, "GET", "/accessPoint", params=params) return relay_json(resp) @router.get("/address-whisper", summary="Našeptávač adres") async def address_whisper( street: str | None = Query(default=None), zip_code: str | None = Query(default=None, alias="zipCode"), city: str | None = Query(default=None), called_from: str | None = Query( default=None, alias="calledFrom", description="Které pole vyvolalo dotaz: Street, ZipCode nebo City.", ), creds: Credentials = Depends(get_credentials), ): """`GET addressWhisper` — validace/doplnění adresy (vrací i pole `valid`).""" params: dict[str, Any] = {} if street: params["Street"] = street if zip_code: params["ZipCode"] = zip_code if city: params["City"] = city if called_from: params["CalledFrom"] = called_from resp = await cpl_request(creds, "GET", "/addressWhisper", params=params or None) return relay_json(resp) @router.get("/routing", summary="Směrovací informace pro etiketu") async def routing( country: str = Query(..., description="Kód země (povinný), např. CZ."), street: str | None = Query(default=None), city: str | None = Query(default=None), zip_code: str | None = Query(default=None, alias="zipCode"), product_type: str | None = Query(default=None, alias="productType"), parcel_shop_code: str | None = Query(default=None, alias="parcelShopCode"), creds: Credentials = Depends(get_credentials), ): """`GET routing` — kód trasy, depo a pozice v depu pro danou adresu.""" params: dict[str, Any] = {"Country": country} if street: params["Street"] = street if city: params["City"] = city if zip_code: params["ZipCode"] = zip_code if product_type: params["ProductType"] = product_type if parcel_shop_code: params["ParcelShopCode"] = parcel_shop_code resp = await cpl_request(creds, "GET", "/routing", params=params) return relay_json(resp) @router.get("/data/{data_guid}", summary="Tisková data etikety (binární)") async def get_data( data_guid: str, creds: Credentials = Depends(get_credentials), ): """`GET data/{dataGuid}` — stažení jednotlivé etikety přes labelUrl guid (používá se hlavně po změně formátu Pdf -> Zpl).""" resp = await cpl_request(creds, "GET", f"/data/{data_guid}") return relay_binary(resp)