# apps/aroflo_connector_app/zones/lastupdate.py
from __future__ import annotations

from typing import Any, Dict, List, Optional

from .base import Zone, ZoneOperation


class LastUpdateZone(Zone):
    code = "lastupdate"
    label = "LastUpdate"
    description = "Operaciones de última actualización (health-check / sync incremental)."

    @property
    def operations(self) -> List[ZoneOperation]:
        # TODO: Ajustar labels / descriptions exactamente a la doc de AroFlo
        return [
            ZoneOperation(
                code="get_lastupdate_since",
                label="Get lastupdate since",
                description="Devuelve cambios desde una fecha/hora dada.",
            ),
            ZoneOperation(
                code="get_lastupdate_tasks",
                label="Get lastupdate Tasks",
                description="Devuelve tareas modificadas desde el último sync.",
            ),
            ZoneOperation(
                code="get_lastupdate_quotes",
                label="Get lastupdate Quotes",
                description="Devuelve cotizaciones modificadas desde el último sync.",
            ),
        ]

    def execute(
        self,
        operation_code: str,
        params: Optional[Dict[str, Any]] = None,
    ) -> Any:
        """
        Aquí mapeamos cada operation_code a la llamada AroFlo real.
        Cuando tengas la doc, rellenamos los paths exactos y nombres
        de filtros (por ejemplo: fromdate, todate, lastupdateid, etc.).
        """
        params = params or {}
        op = self.get_operation(operation_code)

        # IMPORTANTE:
        # Sustituye las llamadas de ejemplo de abajo por tu método real de cliente,
        # algo como: self.client.request(resource="LastUpdate", action="Get lastupdate since", params=params)
        if op.code == "get_lastupdate_since":
            return self.client.request(
                zone="LastUpdate",
                action="Get lastupdate since",
                params=params,
            )

        if op.code == "get_lastupdate_tasks":
            return self.client.request(
                zone="LastUpdate",
                action="Get lastupdate Tasks",
                params=params,
            )

        if op.code == "get_lastupdate_quotes":
            return self.client.request(
                zone="LastUpdate",
                action="Get lastupdate Quotes",
                params=params,
            )

        raise ValueError(f"Operación '{operation_code}' no soportada en LastUpdateZone")
