""" Caso de Uso: ObtenerETA Orquesta la lógica: valida que la zona pertenece al usuario, busca la ruta asignada y devuelve solo el ETA. """ from dataclasses import dataclass from typing import Optional from app.domain.interfaces.i_ruta_repository import IRutaRepository @dataclass class ETAResponse: zona_id: str estado: str eta_minutos: Optional[int] mensaje: str ruta_nombre: str class ObtenerETAUseCase: def __init__(self, repo: IRutaRepository): self.repo = repo def ejecutar(self, zona_id: str) -> Optional[ETAResponse]: ruta = self.repo.obtener_ruta_por_zona(zona_id) if not ruta: return None estado = self.repo.obtener_estado(ruta.id) if not estado: return ETAResponse( zona_id=zona_id, estado="sin_iniciar", eta_minutos=None, mensaje="El camión aún no ha iniciado su ruta para hoy.", ruta_nombre=ruta.nombre, ) return ETAResponse( zona_id=zona_id, estado=estado.estado.value, eta_minutos=estado.eta_minutos, mensaje=estado.mensaje, ruta_nombre=ruta.nombre, )