# apps/aroflo_connector_app/services/dispatcher.py
from __future__ import annotations

from typing import Any, Dict

from ..zones.registry import list_zones_metadata, get_zone


def get_zones_overview(client: Any) -> Dict[str, Any]:
    """
    Devuelve metadata de las zonas, pensado para GET /zones.
    """
    zones = list_zones_metadata(client)
    return {"zones": zones}


def dispatch_zone_query(
    client: Any,
    zone_code: str,
    payload: Dict[str, Any],
) -> Dict[str, Any]:
    """
    Lógica central para POST /zone/<zone_code>/query

    Espera un body tipo:
    {
      "operation": "get_users",
      "params": {
         ... filtros ...
      }
    }
    """
    operation = payload.get("operation")
    params = payload.get("params") or {}

    if not operation:
        raise ValueError("Campo 'operation' es obligatorio en el payload.")

    zone = get_zone(client, zone_code)
    result = zone.execute(operation, params=params)

    return {
        "zone": zone_code,
        "operation": operation,
        "params": params,
        "result": result,
    }
