<?php
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

header('Content-Type: application/json');
require_once(__DIR__ . '/../db/conexion.php');

$response = ['success' => false, 'message' => 'Acción no válida'];

if (!isset($_SESSION['attuid'])) {
    $response['message'] = 'No autorizado';
    echo json_encode($response);
    exit;
}

$usuario = $_SESSION['attuid'];

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    $response['message'] = 'Método inválido';
    echo json_encode($response);
    exit;
}

$data = json_decode(file_get_contents('php://input'), true);

$aspirante_id = isset($data['aspirante_id']) ? intval($data['aspirante_id']) : 0;
$estatus = isset($data['estatus']) ? trim($data['estatus']) : '';
$comentario = isset($data['comentario']) ? trim($data['comentario']) : '';

if ($aspirante_id <= 0 || $estatus === '') {
    $response['message'] = 'Datos incompletos';
    echo json_encode($response);
    exit;
}

// 1. Verificar que el estatus existe
$check = $conn->prepare("SELECT 1 FROM catalogo_estatus WHERE clave = ?");
$check->bind_param("s", $estatus);
$check->execute();
$res = $check->get_result();
if ($res->num_rows === 0) {
    $response['message'] = 'Estatus no válido';
    echo json_encode($response);
    exit;
}

// 2. Obtener estatus actual y vacante del aspirante
$info = $conn->prepare("SELECT estatus_actual, vacante_puesto, vacante_pdv FROM aspirantes WHERE id = ?");
$info->bind_param("i", $aspirante_id);
$info->execute();
$resInfo = $info->get_result();
$row = $resInfo->fetch_assoc();

if (!$row) {
    $response['message'] = 'Aspirante no encontrado';
    echo json_encode($response);
    exit;
}

$estatusActualBD = $row['estatus_actual'];
$vacantePuesto = isset($row['vacante_puesto']) ? trim($row['vacante_puesto']) : '';
$vacantePdv = isset($row['vacante_pdv']) ? trim($row['vacante_pdv']) : '';

// Depuración
error_log("VALOR vacante_puesto: '$vacantePuesto'");
error_log("VALOR vacante_pdv: '$vacantePdv'");

// 3. Validar transición visita → contratado con vacante obligatoria
if ($estatusActualBD === 'visita' && $estatus === 'contratado') {
    if (strlen($vacantePuesto) === 0 || strlen($vacantePdv) === 0) {
        $response['message'] = 'No puedes contratar a este candidato sin haber asignado una vacante.';
        echo json_encode($response);
        exit;
    }
}

// 4. Registrar seguimiento
$insert = $conn->prepare("
    INSERT INTO seguimiento_estatus (aspirante_id, estatus, usuario, comentario)
    VALUES (?, ?, ?, ?)
");
$insert->bind_param("isss", $aspirante_id, $estatus, $usuario, $comentario);

if ($insert->execute()) {
    // 5. Actualizar estatus actual del aspirante
    $update = $conn->prepare("UPDATE aspirantes SET estatus_actual = ? WHERE id = ?");
    $update->bind_param("si", $estatus, $aspirante_id);
    $update->execute();

    // 6. Solo si el estatus actual en BD es 'visita', actualizamos en referencias o Referencias
    if ($estatusActualBD === 'visita') {
        $stmtCurp = $conn->prepare("SELECT curp FROM aspirantes WHERE id = ?");
        $stmtCurp->bind_param("i", $aspirante_id);
        $stmtCurp->execute();
        $resCurp = $stmtCurp->get_result();
        $curp = $resCurp->fetch_assoc()['curp'] ?? null;

        if ($curp) {
            // Detectar si existe referencias o Referencias
            $tablaReferencias = null;
            $checkLower = $conn->query("SHOW TABLES LIKE 'referencias'");
            if ($checkLower && $checkLower->num_rows > 0) {
                $tablaReferencias = 'referencias';
            } else {
                $checkUpper = $conn->query("SHOW TABLES LIKE 'Referencias'");
                if ($checkUpper && $checkUpper->num_rows > 0) {
                    $tablaReferencias = 'Referencias';
                }
            }

            if ($tablaReferencias) {
                $query = "UPDATE `$tablaReferencias` SET Estatus = ? WHERE CURP = ?";
                $updateRef = $conn->prepare($query);
                $updateRef->bind_param("ss", $estatus, $curp);
                $updateRef->execute();
            } else {
                error_log("❌ No se encontró la tabla referencias ni Referencias");
            }
        }
    }

    $response['success'] = true;
    $response['message'] = 'Estatus actualizado correctamente';
} else {
    $response['message'] = 'Error al registrar el estatus';
}

echo json_encode($response);
