# apps/leave_form_app/api/v1/routes_overheads.py
from __future__ import annotations

import os
import json
import subprocess
from flask import Blueprint, request, jsonify, current_app

overheads_bp = Blueprint("leave_api_overheads", __name__)

PROJECT_ROOT = "/var/www/html/flask_server"
PYTHON_BIN = os.getenv("VENV_PYTHON", f"{PROJECT_ROOT}/venv/bin/python")

@overheads_bp.get("/overheads")
def list_overheads():
    group = request.args.get("group")  # opcional
    active_only = request.args.get("active_only", "1")

    cmd = [
        PYTHON_BIN,
        "-m", "apps.aroflo_connector_app.cli",
        "overheads", "list",
    ]

    # Si active_only=0 => trae TODOS (equivale a --all según tu CLI)
    if active_only in ("0", "false", "False"):
        cmd.append("--all")

    env = os.environ.copy()
    env["PYTHONPATH"] = PROJECT_ROOT + (":" + env["PYTHONPATH"] if env.get("PYTHONPATH") else "")

    current_app.logger.info("[leave_app] overheads cmd=%s", " ".join(cmd))

    r = subprocess.run(
        cmd,
        cwd=PROJECT_ROOT,
        env=env,
        capture_output=True,
        text=True,
        timeout=45,
    )

    if r.returncode != 0:
        return jsonify({
            "status": "error",
            "message": "AroFlo overheads CLI failed",
            "stderr": (r.stderr or "")[-2000:],
            "stdout": (r.stdout or "")[-2000:],
        }), 500

    # El CLI debería imprimir JSON si está bien armado (como tus otras zonas)
    payload = json.loads(r.stdout or "{}")

    # Ajusta a tu shape real: suele ser {"overheads": [...]} en este comando
    items = payload.get("overheads") or []

    # Filtro opcional por group (solo si el CLI realmente entrega 'group')
    if group:
        items = [x for x in items if x.get("group") == group]

    # Orden opcional por name
    items.sort(key=lambda x: (x.get("name") or "").strip().lower())

    return jsonify({"status": "ok", "overheads": items, "count": len(items)})
