#/apps/aroflo_connector_app/zones/businessunits/_join_utils.py
from __future__ import annotations

from typing import Any, Dict, List, Tuple
from urllib.parse import urlencode


def request(client: Any, method: str, params_list: List[Tuple[str, str]]) -> Any:
    """
    Ejecuta request al client AroFlo usando lista de params para permitir repetidos.
    Esta zona es READ ONLY (GET).
    """
    var_string = urlencode(params_list)
    method_u = (method or "GET").upper()
    return client.request("", method=method_u, params=params_list, var_string=var_string)


def raw_wrap(resp: Any, params_list: List[Tuple[str, str]]) -> Dict[str, Any]:
    return {
        "data": resp,
        "meta": {
            "params": params_list,
            "var_string": urlencode(params_list),
        },
    }


def coerce_page_size(params: Dict[str, Any]) -> str | None:
    v = params.get("pageSize", None)
    if v is None:
        v = params.get("pagesize", None)

    if v is None or v == "":
        return None

    try:
        iv = int(v)
    except Exception:
        raise ValueError("pageSize debe ser un entero.")

    if iv <= 0:
        raise ValueError("pageSize debe ser > 0.")

    return str(iv)


def build_list_params(
    *,
    zone: str,
    where: str | None,
    join: str | None,
    page: int,
    pageSize: str | None,
) -> List[Tuple[str, str]]:
    params_list: List[Tuple[str, str]] = [("zone", zone)]

    if join:
        params_list.append(("join", join))

    if where:
        params_list.append(("where", where))

    if pageSize:
        params_list.append(("pageSize", pageSize))

    params_list.append(("page", str(page)))
    return params_list
