<?php
session_start();
ini_set('display_errors', 1);
error_reporting(E_ALL);
header('Content-Type: application/json');
ob_clean();

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

$response = ['success' => false, 'data' => [], 'total' => 0];

if (!isset($_SESSION['attuid'], $_SESSION['rol'])) {
    echo json_encode($response);
    exit;
}

$attuid = $_SESSION['attuid'];
$rol = $_SESSION['rol'];

$busqueda = $_GET['busqueda'] ?? '';
$estatusFiltro = $_GET['estado'] ?? '';

// ✅ Eliminamos paginación del backend, ahora se hará en frontend
$sqlBase = "FROM aspirantes a";
$condiciones = [];
$params = [];
$tipos = "";

// Filtro por rol
if (!in_array($rol, ['admin', 'adminTi', 'coordinador'])) {
    $condiciones[] = "a.attuid = ?";
    $params[] = $attuid;
    $tipos .= "s";
}

// Filtro por estatus
if (!empty($estatusFiltro)) {
    if ($estatusFiltro === 'activo') {
        $condiciones[] = "a.estatus_actual != 'rechazado'";
    } else {
        $condiciones[] = "a.estatus_actual = ?";
        $params[] = $estatusFiltro;
        $tipos .= "s";
    }
}

// Filtro por búsqueda
if (!empty($busqueda)) {
    $condiciones[] = "(a.folio LIKE ? OR a.nombre LIKE ? OR a.apellido_paterno LIKE ? OR a.apellido_materno LIKE ? OR a.puesto LIKE ?)";
    $like = "%$busqueda%";
    array_push($params, $like, $like, $like, $like, $like);
    $tipos .= "sssss";
}

// Excluir aspirantes enviados al banco
$condiciones[] = "a.id NOT IN (SELECT aspirante_id FROM banco_registros WHERE estatus = 'pendiente')";

// Concatenar condiciones
if (!empty($condiciones)) {
    $sqlBase .= " WHERE " . implode(" AND ", $condiciones);
}

// Total
$sqlCount = "SELECT COUNT(*) as total $sqlBase";
$stmtCount = $conn->prepare($sqlCount);
if (!empty($params)) {
    $stmtCount->bind_param($tipos, ...$params);
}
$stmtCount->execute();
$resultCount = $stmtCount->get_result();
$total = $resultCount->fetch_assoc()['total'] ?? 0;

// ✅ Consulta de datos sin paginación
$sqlData = "
SELECT 
    a.id,
    a.folio,
    a.nombre,
    a.apellido_paterno,
    a.apellido_materno,
    a.puesto,
    a.estatus_actual,
    a.fecha_registro,
    CONCAT(cu.municipio, ', ', cu.estado) AS ciudad
FROM aspirantes a
LEFT JOIN catalogo_ubicaciones cu ON a.ubicacion = cu.id
";

// Agregar condiciones
if (!empty($condiciones)) {
    $sqlData .= " WHERE " . implode(" AND ", $condiciones);
}

// Ordenar por fecha ascendente (para ordenar los en proceso primero)
$sqlData .= " ORDER BY a.fecha_registro ASC";

$stmtData = $conn->prepare($sqlData);
if (!empty($params)) {
    $stmtData->bind_param($tipos, ...$params);
}
$stmtData->execute();
$resultData = $stmtData->get_result();

// Construir el array de candidatos
$candidatos = [];
while ($row = $resultData->fetch_assoc()) {
    $candidatos[] = [
        'id' => $row['id'],
        'folio' => $row['folio'],
        'nombre_completo' => "{$row['nombre']} {$row['apellido_paterno']} {$row['apellido_materno']}",
        'puesto' => $row['puesto'],
        'estado' => $row['estatus_actual'],
        'ciudad' => $row['ciudad'] ?? 'Ubicación no disponible'
    ];
}

$response['success'] = true;
$response['data'] = $candidatos;
$response['total'] = count($candidatos); // total real ya que se trae todo

echo json_encode($response, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
exit;
?>
