"""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
