"""
Interfaces del dominio.
El dominio define QUÉ necesita, no CÓMO se implementa.
La capa de Datos implementa estas interfaces.
"""
from abc import ABC, abstractmethod
from typing import Optional

from app.domain.entities.ruta import EstadoRuta, Ruta


class IRutaRepository(ABC):

    @abstractmethod
    def obtener_ruta(self, ruta_id: str) -> Optional[Ruta]:
        ...

    @abstractmethod
    def obtener_estado(self, ruta_id: str) -> Optional[EstadoRuta]:
        ...

    @abstractmethod
    def guardar_estado(self, estado: EstadoRuta) -> None:
        ...

    @abstractmethod
    def obtener_ruta_por_zona(self, zona_id: str) -> Optional[Ruta]:
        """
        Devuelve la ruta asignada a una zona.
        Cumple la restricción de 'túnel': el domicilio solo ve su ruta.
        """
        ...
