"""Puente HTTP (Apache/PHP) -> controladores Python.

Uso:
    python http_handler.py ingestar < stdin.json
    python http_handler.py procesar
"""

from __future__ import annotations

import json
import logging
import sys
from typing import Any

logging.basicConfig(
    stream=sys.stderr,
    level=logging.INFO,
    format="%(asctime)s | %(levelname)s | %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
)


def _leer_stdin() -> Any:
    bruto = sys.stdin.read()
    if not bruto.strip():
        return {}
    return json.loads(bruto)


def main() -> int:
    if len(sys.argv) < 2:
        print(json.dumps({"ok": False, "error": "Falta la acción (ingestar|procesar)"}))
        return 1

    accion = sys.argv[1].strip().lower()

    try:
        if accion == "ingestar":
            from controllers.ingest_controller import recibir_oportunidades_raw

            payload = _leer_stdin()
            lote = recibir_oportunidades_raw(payload)
            print(
                json.dumps(
                    {
                        "ok": True,
                        "total": len(lote["pendientes"]),
                        "archivo": "storage/no_iniciados/lote.json",
                        "pendientes": lote["pendientes"],
                    },
                    ensure_ascii=False,
                )
            )
            return 0

        if accion == "procesar":
            from controllers.process_controller import procesar_lote_pendiente

            resultado = procesar_lote_pendiente()
            print(
                json.dumps(
                    {
                        "ok": True,
                        "total": len(resultado),
                        "archivo": "storage/completados/resultado.json",
                        "oportunidades": list(resultado.keys()),
                    },
                    ensure_ascii=False,
                )
            )
            return 0

        print(json.dumps({"ok": False, "error": f"Acción no soportada: {accion}"}))
        return 1
    except Exception as error:
        print(json.dumps({"ok": False, "error": str(error)}, ensure_ascii=False))
        return 1


if __name__ == "__main__":
    raise SystemExit(main())
