"""Utilitários HTTP para comunicação com a API KeepEdu."""
from __future__ import annotations

import json
from typing import Any

import requests


def post_json_comprimido(
    url: str,
    payload: Any,
    *,
    headers: dict[str, str] | None = None,
    timeout: int | float | None = None,
    client: Any = requests,
    **kwargs: Any,
) -> requests.Response:
    """Envia JSON UTF-8 compacto no formato aceito pela API KeepEdu.

    A API KeepEdu não descompacta corpos com ``Content-Encoding: gzip`` e os
    interpreta como "JSON inválido". Usamos serialização minificada, que reduz
    o tráfego sem alterar o contrato HTTP que a API consegue ler.
    """
    corpo_json = json.dumps(
        payload,
        ensure_ascii=False,
        separators=(",", ":"),
    ).encode("utf-8")
    cabecalhos = dict(headers or {})
    cabecalhos["Content-Type"] = "application/json"
    cabecalhos.setdefault("Accept", "application/json")
    return client.post(
        url,
        data=corpo_json,
        headers=cabecalhos,
        timeout=timeout,
        **kwargs,
    )
