<?php

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Content-Type: application/json; charset=utf-8");

// 🔥 RESPONDER PREFLIGHT Y MORIR AQUÍ
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}


ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);



require_once(__DIR__ . '/../config.php');        
require_once(__DIR__ . '/../auth_guard.php');   

// ===================== HELPERS =====================
function cleanText($v) {
  $v = trim((string)$v);
  return $v === "" ? null : $v;
}

function jsonInput(): array {
  $raw = file_get_contents("php://input");
  $data = json_decode($raw, true);
  return is_array($data) ? $data : [];
}

function respond($arr, int $code = 200) {
  http_response_code($code);
  echo json_encode($arr);
  exit;
}

// ===================== AUTH =====================
$authUser = requireAuth($JWT_KEY);
$activeUser = requireActiveUser($mysqli, $authUser); // aquí validas que exista y esté activo

// (Opcional) Si solo admin puede entrar:
// if ((int)$activeUser["TIPO_USUARIO"] !== 1) respond(["success"=>false,"message"=>"No autorizado"], 403);

// ===================== ROUTER =====================
$method = $_SERVER['REQUEST_METHOD'];

try {

  // -------- GET (listar u obtener uno) --------
  if ($method === 'GET') {
    $id = isset($_GET["id"]) ? (int)$_GET["id"] : 0;

    if ($id > 0) {
      $sql = "SELECT I.*,
                     E.NOMBRE_ESTADO
              FROM INSTITUCIONES I
              JOIN ESTADO E ON E.ID_ESTADO = I.ESTADO_INSTITUCION
              WHERE I.ID_INSTITUCION = ?
              LIMIT 1";
      $stmt = $mysqli->prepare($sql);
      $stmt->bind_param("i", $id);
      $stmt->execute();
      $row = $stmt->get_result()->fetch_assoc();

      if (!$row) respond(["success"=>false,"message"=>"No encontrado"], 404);
      respond(["success"=>true,"data"=>$row]);
    }

    $sql = "SELECT I.*,
                   E.NOMBRE_ESTADO
            FROM INSTITUCIONES I
            JOIN ESTADO E ON E.ID_ESTADO = I.ESTADO_INSTITUCION
            ORDER BY I.ID_INSTITUCION DESC";
    $res = $mysqli->query($sql);

    $rows = [];
    while ($r = $res->fetch_assoc()) $rows[] = $r;

    respond(["success"=>true, "total"=>count($rows), "data"=>$rows]);
  }

  // -------- POST (crear) --------
  if ($method === 'POST') {
    $b = jsonInput();

    $NOMBRE_INSTITUCION = cleanText($b["NOMBRE_INSTITUCION"] ?? "");
    $CIUDAD_INSTITUCION = cleanText($b["CIUDAD_INSTITUCION"] ?? "");

    if (!$NOMBRE_INSTITUCION || !$CIUDAD_INSTITUCION) {
      respond(["success"=>false,"message"=>"NOMBRE_INSTITUCION y CIUDAD_INSTITUCION son obligatorios"], 400);
    }

    $NIT_INSTITUCION = cleanText($b["NIT_INSTITUCION"] ?? null);
    $DIRECCION_INSTITUCION = cleanText($b["DIRECCION_INSTITUCION"] ?? null);
    $TELEFONO_INSTITUCION = cleanText($b["TELEFONO_INSTITUCION"] ?? null);
    $CORREO_INSTITUCION = cleanText($b["CORREO_INSTITUCION"] ?? null);
    $ESTADO_INSTITUCION = (int)($b["ESTADO_INSTITUCION"] ?? 1);

    $sql = "INSERT INTO INSTITUCIONES
            (NOMBRE_INSTITUCION, NIT_INSTITUCION, CIUDAD_INSTITUCION, DIRECCION_INSTITUCION,
             TELEFONO_INSTITUCION, CORREO_INSTITUCION, ESTADO_INSTITUCION)
            VALUES (?,?,?,?,?,?,?)";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param(
      "ssssssi",
      $NOMBRE_INSTITUCION,
      $NIT_INSTITUCION,
      $CIUDAD_INSTITUCION,
      $DIRECCION_INSTITUCION,
      $TELEFONO_INSTITUCION,
      $CORREO_INSTITUCION,
      $ESTADO_INSTITUCION
    );
    $stmt->execute();

    respond(["success"=>true,"id"=>$mysqli->insert_id,"message"=>"Institución creada"]);
  }

  // -------- PUT (actualizar) --------
  if ($method === 'PUT') {
    $b = jsonInput();

    $ID_INSTITUCION = (int)($b["ID_INSTITUCION"] ?? 0);
    if ($ID_INSTITUCION <= 0) {
      respond(["success"=>false,"message"=>"ID_INSTITUCION requerido"], 400);
    }

    $NOMBRE_INSTITUCION = cleanText($b["NOMBRE_INSTITUCION"] ?? "");
    $CIUDAD_INSTITUCION = cleanText($b["CIUDAD_INSTITUCION"] ?? "");
    if (!$NOMBRE_INSTITUCION || !$CIUDAD_INSTITUCION) {
      respond(["success"=>false,"message"=>"NOMBRE_INSTITUCION y CIUDAD_INSTITUCION son obligatorios"], 400);
    }

    $NIT_INSTITUCION = cleanText($b["NIT_INSTITUCION"] ?? null);
    $DIRECCION_INSTITUCION = cleanText($b["DIRECCION_INSTITUCION"] ?? null);
    $TELEFONO_INSTITUCION = cleanText($b["TELEFONO_INSTITUCION"] ?? null);
    $CORREO_INSTITUCION = cleanText($b["CORREO_INSTITUCION"] ?? null);
    $ESTADO_INSTITUCION = (int)($b["ESTADO_INSTITUCION"] ?? 1);

    $sql = "UPDATE INSTITUCIONES SET
              NOMBRE_INSTITUCION=?,
              NIT_INSTITUCION=?,
              CIUDAD_INSTITUCION=?,
              DIRECCION_INSTITUCION=?,
              TELEFONO_INSTITUCION=?,
              CORREO_INSTITUCION=?,
              ESTADO_INSTITUCION=?
            WHERE ID_INSTITUCION=?";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param(
      "ssssssii",
      $NOMBRE_INSTITUCION,
      $NIT_INSTITUCION,
      $CIUDAD_INSTITUCION,
      $DIRECCION_INSTITUCION,
      $TELEFONO_INSTITUCION,
      $CORREO_INSTITUCION,
      $ESTADO_INSTITUCION,
      $ID_INSTITUCION
    );
    $stmt->execute();

    respond(["success"=>true,"message"=>"Institución actualizada"]);
  }

  // -------- DELETE (soft delete → INACTIVO) --------
  if ($method === 'DELETE') {
    $id = isset($_GET["id"]) ? (int)$_GET["id"] : 0;
    if ($id <= 0) respond(["success"=>false,"message"=>"id requerido"], 400);

    $sql = "UPDATE INSTITUCIONES SET ESTADO_INSTITUCION=2 WHERE ID_INSTITUCION=?";
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param("i", $id);
    $stmt->execute();

    respond(["success"=>true,"message"=>"Institución inactivada"]);
  }

  respond(["success"=>false,"message"=>"Método no permitido"], 405);

} catch (Throwable $e) {
  respond(["success"=>false,"message"=>"Error interno","error"=>$e->getMessage()], 500);
}
