#!/usr/bin/env python3
from flask import Flask, jsonify
import requests

app = Flask(__name__)

ZABBIX_URL = "http://zabbix.comnet.mx/zabbix/api_jsonrpc.php"
ZABBIX_TOKEN = "651d262f3cbf4e38971134a0182f1627a64613ff4fc0e1f1e2fe2a53d92c19f9"

HEADERS = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {ZABBIX_TOKEN}"
}

def zabbix_api(method, params):
    payload = {
        "jsonrpc": "2.0",
        "method": method,
        "params": params,
#        "auth": ZABBIX_TOKEN,
        "id": 1
 }

    r = requests.post(ZABBIX_URL, json=payload, headers=HEADERS, timeout=10)
    
    try:
        data = r.json()
    except Exception:
        raise Exception(f"Respuesta inválida de Zabbix: {r.text}")

    # 🔴 Si hay error en Zabbix → mostrarlo
    if "error" in data:
        raise Exception(f"Zabbix API error: {data['error']}")

    # 🔴 Si no viene result
    if "result" not in data:
        raise Exception(f"Respuesta inesperada: {data}")

    return data["result"]

@app.route("/problems", methods=["GET"])
def get_problems():
    try:
        # 🔹 Paso 1: obtener problemas severidad 4 y 5
        problems = zabbix_api("problem.get", {
            "output": ["eventid", "severity"],
            "severities": [4, 5],
            "selectHosts": ["hostid", "host"]
        })

        # 🔹 Obtener hostids únicos
        hostids = list({h["hostid"] for p in problems for h in p["hosts"]})

        if not hostids:
            return jsonify([])

        # 🔹 Paso 2: obtener IPs
        hosts = zabbix_api("host.get", {
            "output": ["hostid", "host"],
            "hostids": hostids,
            "selectInterfaces": ["ip"]
        })

        # 🔹 Mapear hostid -> IP
        host_map = {
            h["hostid"]: {
                "host": h["host"],
                "ip": h["interfaces"][0]["ip"] if h["interfaces"] else "N/A"
            }
            for h in hosts
        }

        # 🔹 Construir respuesta limpia para AppSheet
        result = []
        for p in problems:
            for h in p["hosts"]:
                data = host_map.get(h["hostid"], {})
                result.append({
                    "host": data.get("host"),
                    "ip": data.get("ip"),
                    "severity": p["severity"],
                    "eventid": p["eventid"]
                })

        return jsonify(result)

    except Exception as e:
        return jsonify({"error": str(e)})


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5010)
