<?php
// estudio_seguridad/cambiar_estado_todo.php
// Cambia estados de 1 -> 2 en todas las tablas relacionadas al estudio

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

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

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
  http_response_code(200);
  exit;
}

require_once(__DIR__ . '/../config.php'); // ajusta si tu ruta cambia (debe exponer $mysqli)

// ================== HELPERS ==================
function respond($success, $message, $data = null, $code = 200) {
  http_response_code($code);
  echo json_encode([
    "success" => $success,
    "message" => $message,
    "data" => $data
  ]);
  exit;
}

function pick($arr, $key, $default = null) {
  return isset($arr[$key]) ? $arr[$key] : $default;
}

// ================== INPUT ==================
$raw  = file_get_contents("php://input");
$data = json_decode($raw, true);

if (!$data) {
  respond(false, "JSON inválido o vacío.", ["raw" => $raw], 400);
}

$idEstudio   = intval(pick($data, "ID_ESTUDIO", 0));
$idCandidato = intval(pick($data, "ID_CANDIDATO_EMPRESA", 0));
$fromEstado  = intval(pick($data, "from", 1));
$toEstado    = intval(pick($data, "to", 2));

if ($idEstudio <= 0 || $idCandidato <= 0) {
  respond(false, "ID_ESTUDIO e ID_CANDIDATO_EMPRESA son requeridos.", null, 400);
}

if ($fromEstado <= 0 || $toEstado <= 0) {
  respond(false, "from/to inválidos.", null, 400);
}

// ================== LOGIC ==================
try {
  // Por seguridad, verificamos que el estudio exista y pertenezca al candidato
  $sqlCheck = "SELECT ID_ESTUDIO, ID_CANDIDATO_EMPRESA, ESTADO_ESTUDIO
               FROM ESTUDIO_SEGURIDAD
               WHERE ID_ESTUDIO = ? AND ID_CANDIDATO_EMPRESA = ?
               LIMIT 1";
  $stmt = $mysqli->prepare($sqlCheck);
  if (!$stmt) respond(false, "Error preparando verificación", ["error" => $mysqli->error], 500);

  $stmt->bind_param("ii", $idEstudio, $idCandidato);
  $stmt->execute();
  $rowEst = $stmt->get_result()->fetch_assoc();
  $stmt->close();

  if (!$rowEst) {
    respond(false, "Estudio no encontrado para este candidato.", null, 404);
  }

  // Inicia transacción
  $mysqli->begin_transaction();

  $updated = [];

  // ✅ 0) CANDIDATO_EMPRESA -> ESTADO_CANDIDATO (solo si está en 1)
  // Nota: aquí aplicamos exactamente lo que pediste: set a 2 solo si actualmente es 1.
  $sql0 = "UPDATE CANDIDATO_EMPRESA
           SET ESTADO_CANDIDATO = 2
           WHERE ID_EMPRESA = ? AND ESTADO_CANDIDATO = 1";
  $stmt = $mysqli->prepare($sql0);
  if (!$stmt) throw new Exception("Error preparando UPDATE CANDIDATO_EMPRESA: " . $mysqli->error);
  $stmt->bind_param("i", $idCandidato);
  $stmt->execute();
  $updated["CANDIDATO_EMPRESA"] = $stmt->affected_rows;
  $stmt->close();

  // 1) ESTUDIO_SEGURIDAD -> ESTADO_ESTUDIO
  $sql1 = "UPDATE ESTUDIO_SEGURIDAD
           SET ESTADO_ESTUDIO = ?
           WHERE ID_ESTUDIO = ? AND ID_CANDIDATO_EMPRESA = ? AND ESTADO_ESTUDIO = ?";
  $stmt = $mysqli->prepare($sql1);
  if (!$stmt) throw new Exception("Error preparando UPDATE ESTUDIO_SEGURIDAD: " . $mysqli->error);
  $stmt->bind_param("iiii", $toEstado, $idEstudio, $idCandidato, $fromEstado);
  $stmt->execute();
  $updated["ESTUDIO_SEGURIDAD"] = $stmt->affected_rows;
  $stmt->close();

  // 2) CONSULTAS_ENTIDADES -> ESTADO_REGISTRO (si tu tabla usa otro campo, dime y lo ajusto)
  $sql2 = "UPDATE CONSULTAS_ENTIDADES
           SET ESTADO_REGISTRO = ?
           WHERE ID_CANDIDATO_EMPRESA = ? AND (ID_ESTUDIO = ? OR ID_ESTUDIO IS NULL)
             AND (ESTADO_REGISTRO = ? OR ESTADO_REGISTRO IS NULL)";
  $stmt = $mysqli->prepare($sql2);
  if (!$stmt) throw new Exception("Error preparando UPDATE CONSULTAS_ENTIDADES: " . $mysqli->error);
  $stmt->bind_param("iiii", $toEstado, $idCandidato, $idEstudio, $fromEstado);
  $stmt->execute();
  $updated["CONSULTAS_ENTIDADES"] = $stmt->affected_rows;
  $stmt->close();

  // 3) HECHOS_NOVEDADES -> ESTADO_REGISTRO
  $sql3 = "UPDATE HECHOS_NOVEDADES
           SET ESTADO_REGISTRO = ?
           WHERE ID_CANDIDATO_EMPRESA = ? AND (ID_ESTUDIO = ? OR ID_ESTUDIO IS NULL)
             AND ESTADO_REGISTRO = ?";
  $stmt = $mysqli->prepare($sql3);
  if (!$stmt) throw new Exception("Error preparando UPDATE HECHOS_NOVEDADES: " . $mysqli->error);
  $stmt->bind_param("iiii", $toEstado, $idCandidato, $idEstudio, $fromEstado);
  $stmt->execute();
  $updated["HECHOS_NOVEDADES"] = $stmt->affected_rows;
  $stmt->close();

  // 4) HISTORIAL_FINANCIERO -> ESTADO_REGISTRO
  $sql4 = "UPDATE HISTORIAL_FINANCIERO
           SET ESTADO_REGISTRO = ?
           WHERE ID_CANDIDATO_EMPRESA = ? AND (ID_ESTUDIO = ? OR ID_ESTUDIO IS NULL)
             AND (ESTADO_REGISTRO = ? OR ESTADO_REGISTRO IS NULL)";
  $stmt = $mysqli->prepare($sql4);
  if (!$stmt) throw new Exception("Error preparando UPDATE HISTORIAL_FINANCIERO: " . $mysqli->error);
  $stmt->bind_param("iiii", $toEstado, $idCandidato, $idEstudio, $fromEstado);
  $stmt->execute();
  $updated["HISTORIAL_FINANCIERO"] = $stmt->affected_rows;
  $stmt->close();

  // 5) REFERENCIAS_LABORALES -> ESTADO_REGISTRO
  $sql5 = "UPDATE REFERENCIAS_LABORALES
           SET ESTADO_REGISTRO = ?
           WHERE ID_CANDIDATO_EMPRESA = ? AND (ID_ESTUDIO = ? OR ID_ESTUDIO IS NULL)
             AND ESTADO_REGISTRO = ?";
  $stmt = $mysqli->prepare($sql5);
  if (!$stmt) throw new Exception("Error preparando UPDATE REFERENCIAS_LABORALES: " . $mysqli->error);
  $stmt->bind_param("iiii", $toEstado, $idCandidato, $idEstudio, $fromEstado);
  $stmt->execute();
  $updated["REFERENCIAS_LABORALES"] = $stmt->affected_rows;
  $stmt->close();

  // 6) REFERENCIAS_EDUCATIVAS -> ESTADO_REGISTRO
  $sql6 = "UPDATE REFERENCIAS_EDUCATIVAS
           SET ESTADO_REGISTRO = ?
           WHERE ID_CANDIDATO_EMPRESA = ? AND ID_ESTUDIO = ? AND ESTADO_REGISTRO = ?";
  $stmt = $mysqli->prepare($sql6);
  if (!$stmt) throw new Exception("Error preparando UPDATE REFERENCIAS_EDUCATIVAS: " . $mysqli->error);
  $stmt->bind_param("iiii", $toEstado, $idCandidato, $idEstudio, $fromEstado);
  $stmt->execute();
  $updated["REFERENCIAS_EDUCATIVAS"] = $stmt->affected_rows;
  $stmt->close();

  // Si tienes otras tablas “hijas” del estudio, agrégalas aquí igual.

  $mysqli->commit();

  respond(true, "Estados actualizados de {$fromEstado} a {$toEstado}.", [
    "ID_ESTUDIO" => $idEstudio,
    "ID_CANDIDATO_EMPRESA" => $idCandidato,
    "from" => $fromEstado,
    "to" => $toEstado,
    "updated_rows" => $updated
  ]);

} catch (Exception $e) {
  if ($mysqli) $mysqli->rollback();
  respond(false, "Error en el servidor", ["error" => $e->getMessage()], 500);
}
