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