<?php
session_start();
header('Content-Type: application/json');

// 1. Validar sesión y rol de subdistribuidor
if (!isset($_SESSION['attuid']) || ($_SESSION['rol'] ?? '') !== 'subdistribuidor') {
    echo json_encode(['success' => false, 'message' => 'Acceso denegado']);
    exit;
}

require_once(__DIR__ . '/../db/conexion.php');

// 2. Recibir y validar datos
$aspirante_id      = intval($_POST['aspirante_id'] ?? 0);
$nuevo_estatus     = trim($_POST['nuevo_estatus'] ?? '');
$resultado_ref     = trim($_POST['resultado_referencia'] ?? '');

// --- DEBUG: Log el estatus recibido ---
error_log("Estatus recibido en actualizar_estatus.php: " . $nuevo_estatus);

// Validar datos mínimos
if (!$aspirante_id || !$nuevo_estatus) {
    echo json_encode(['success' => false, 'message' => 'Datos incompletos']);
    exit;
}

// 3. Traer estatus actual del aspirante
$stmt = $conn->prepare("SELECT estatus_actual FROM aspirantes WHERE id = ? AND subdistribuidor = 1");
$stmt->bind_param("i", $aspirante_id);
$stmt->execute();
$stmt->bind_result($estatus_actual);
$stmt->fetch();
$stmt->close();

if (!$estatus_actual) {
    echo json_encode(['success' => false, 'message' => 'Aspirante no encontrado o acceso denegado']);
    exit;
}

// 4. Lógica especial si viene de referencias
$comentario = '';
if ($estatus_actual === 'referencias' && $resultado_ref) {
    if ($resultado_ref === 'No apto') {
        $nuevo_estatus = 'contratado';
        $comentario = 'Referencias: No apto (cambio automático a contratado)';
    } else {
        // "Apto" o "Recontratable"
        $nuevo_estatus = 'en_pre_alta';
        $comentario = 'Referencias: ' . $resultado_ref;
    }
    error_log("Estatus recalculado desde referencias: " . $nuevo_estatus);
}

// 5. Validar que el nuevo_estatus exista en el catálogo correcto
if (($_SESSION['rol'] ?? '') === 'subdistribuidor') {
    // Validar en el catálogo exclusivo de subdistribuidores
    $stmtCheck = $conn->prepare("SELECT estatus FROM catalogo_estatus_subdistribuidor WHERE estatus = ?");
} else {
    // Validar en el catálogo general
    $stmtCheck = $conn->prepare("SELECT clave FROM catalogo_estatus WHERE clave = ?");
}
$stmtCheck->bind_param("s", $nuevo_estatus);
$stmtCheck->execute();
$stmtCheck->store_result();
if ($stmtCheck->num_rows === 0) {
    echo json_encode(['success' => false, 'message' => "Estatus '$nuevo_estatus' no existe en catálogo."]);
    exit;
}
$stmtCheck->close();

// 6. Actualizar estatus en aspirantes
$stmtUp = $conn->prepare("UPDATE aspirantes SET estatus_actual = ? WHERE id = ?");
$stmtUp->bind_param("si", $nuevo_estatus, $aspirante_id);
if (!$stmtUp->execute()) {
    echo json_encode(['success' => false, 'message' => 'No se pudo actualizar el estatus']);
    exit;
}
$stmtUp->close();

// 7. Registrar el cambio en el historial (seguimiento_estatus)
// Buscar usuario para registrar (ATTUID o nombre de sesión)
$usuario = $_SESSION['attuid'] ?? 'subd';
$comentarioHist = $comentario ?: "Cambio de estatus a $nuevo_estatus";

$stmtHist = $conn->prepare("INSERT INTO seguimiento_estatus (aspirante_id, estatus, fecha, usuario, comentario) VALUES (?, ?, NOW(), ?, ?)");
$stmtHist->bind_param("isss", $aspirante_id, $nuevo_estatus, $usuario, $comentarioHist);
$stmtHist->execute();
$stmtHist->close();

echo json_encode(['success' => true, 'message' => 'Estatus actualizado correctamente']);
$conn->close();
exit;
?>
