from fastapi import APIRouter, Depends, HTTPException from app.services import simulation from app.core.deps import get_current_user from app.core.supabase_client import supabase_admin router = APIRouter(tags=["eta"]) @router.get("/eta") def get_eta( address_id: str, current_user: dict = Depends(get_current_user), ): """ ETA para el ciudadano. - Recibe `address_id` (domicilio del usuario autenticado). - Valida que el domicilio pertenezca al usuario (túnel de privacidad). - Devuelve SOLO texto: nunca coordenadas ni routeId completo. """ result = ( supabase_admin.table("addresses") .select("route_id, user_id") .eq("id", address_id) .maybe_single() .execute() ) if not result.data: raise HTTPException(status_code=404, detail="Domicilio no encontrado") address = result.data # Túnel: ciudadano solo puede consultar sus propios domicilios if current_user["role"] != "admin" and address["user_id"] != current_user["user_id"]: raise HTTPException(status_code=403, detail="No tienes acceso a este domicilio") route_id = address["route_id"] pos = simulation.get_route_position(route_id) status = simulation.get_route_status(route_id) if pos is None: raise HTTPException(status_code=503, detail="Simulación no disponible") if pos < 4: mensaje = "El camión va en camino a tu sector" elif pos == 4: mensaje = "Llega en aproximadamente 15 minutos — saca tus bolsas" elif pos < 8: mensaje = "Está atendiendo tu zona; prepara tus bolsas" else: mensaje = "Servicio del día finalizado. Mañana continuamos" # ⚠️ Nunca devolver coordenadas ni el routeId al ciudadano return {"mensaje": mensaje, "status": status}