"""Ruta punto a punto via Valhalla routing engine.""" from __future__ import annotations import httpx def valhalla_route( locations: list[dict], base_url: str = "http://localhost:8002", costing: str = "auto", units: str = "metric", timeout_s: float = 60.0, ) -> dict | None: """Calcula una ruta entre una lista de ubicaciones usando Valhalla. Args: locations: Lista de dicts con 'lat' y 'lon' (al menos 2 puntos). base_url: URL base del servidor Valhalla. costing: Modelo de coste ('auto', 'bicycle', 'pedestrian', etc.). units: Unidades de distancia ('metric' o 'imperial'). timeout_s: Timeout en segundos para la request HTTP. Returns: Respuesta JSON parseada con 'trip' o None si error. """ url = f"{base_url.rstrip('/')}/route" payload = { "locations": locations, "costing": costing, "units": units, } try: r = httpx.post(url, json=payload, timeout=httpx.Timeout(timeout_s)) r.raise_for_status() return r.json() except Exception: return None