<?php
session_start();
require_once(__DIR__ . '/../db/conexion.php');
header('Content-Type: application/json; charset=utf-8');

if (!isset($_SESSION['rol']) || !in_array($_SESSION['rol'], ['admin', 'adminTi', 'coordinador'])) {
  echo json_encode(['success' => false, 'message' => 'Acceso denegado']);
  exit;
}

// Recibir el JSON del body
$input = json_decode(file_get_contents('php://input'), true);

$inicio = isset($input['inicio']) ? $input['inicio'] : null;
$fin = isset($input['fin']) ? $input['fin'] : null;
$reclutadores = isset($input['reclutadores']) ? $input['reclutadores'] : [];
$incluirAnteriores = isset($input['incAnt']) ? (bool)$input['incAnt'] : false;

// Construir condición IN para reclutadores
$placeholders = implode(',', array_fill(0, count($reclutadores), '?'));
$condicionReclutadores = "AND a.attuid IN ($placeholders)";

// Condiciones de fecha
$condSubquery = '';
$condWhere = '';
$condAcum = '';
$condBanco = '';
$params = [];
$tipos = '';

if ($fin) {
  if (!$incluirAnteriores) {
    $condSubquery = "WHERE DATE(fecha) <= ?";
    $condWhere = "AND DATE(a.fecha_registro) <= ?";
    $condAcum = "AND DATE(a.fecha_registro) >= ?";
    $condBanco = "AND DATE(fecha_ingreso) <= ?";
    $params = [$fin, $fin, $inicio, $fin];
    $tipos = 'ssss';
  } else {
    $condSubquery = "WHERE DATE(fecha) <= ?";
    $condWhere = "AND DATE(a.fecha_registro) <= ?";
    $condBanco = "AND DATE(fecha_ingreso) <= ?";
    $params = [$fin, $fin, $fin];
    $tipos = 'sss';
  }
}

  $params = array_merge($params, $reclutadores);
  $tipos .= str_repeat('s', count($reclutadores));

// Consulta principal con nueva lógica
$sql = "
  SELECT 
    a.id,
    a.nombre,
    a.apellido_paterno,
    a.apellido_materno,
    COALESCE(s.estatus, 'asignado') as estatus_actual,
    a.attuid,
    r.nombre AS reclutador_nombre,
    r.apellido_paterno AS reclutador_ap,
    r.apellido_materno AS reclutador_am
  FROM aspirantes a
  INNER JOIN reclutadores r ON a.attuid = r.attuid
  LEFT JOIN (
      SELECT s1.aspirante_id, s1.estatus, s1.fecha
      FROM seguimiento_estatus s1
      INNER JOIN (
          SELECT MAX(id) as max_id
          FROM seguimiento_estatus
          $condSubquery
          GROUP BY aspirante_id
      ) s2 ON s1.id = s2.max_id
  ) s ON a.id = s.aspirante_id
  WHERE 1=1
    $condWhere
    $condAcum
    AND COALESCE(s.estatus, 'asignado') NOT IN (
        'asignado','rechazado', 'contratado', 'en_pre_alta', 'en_plantilla', 'proceso_concluido'
    )
    AND a.id NOT IN (
        SELECT aspirante_id FROM banco_registros WHERE estatus = 'pendiente'
        $condBanco
    )
  $condicionReclutadores
  ORDER BY r.nombre, COALESCE(s.estatus, 'asignado')
";

$stmt = $conn->prepare($sql);
if (!empty($params)) {
  $stmt->bind_param($tipos, ...$params);
}
$stmt->execute();
$result = $stmt->get_result();

$agrupado = [];
$total = 0;

while ($row = $result->fetch_assoc()) {
  $reclutadorNombreCompleto = mb_strtoupper(trim(
    $row['reclutador_nombre'] . ' ' .
    $row['reclutador_ap'] . ' ' .
    $row['reclutador_am']
  ), 'UTF-8');

  if (!isset($agrupado[$reclutadorNombreCompleto])) {
    $agrupado[$reclutadorNombreCompleto] = [];
  }

  $agrupado[$reclutadorNombreCompleto][] = [
    'id' => $row['id'],
    'nombre' => mb_strtoupper($row['nombre'] . ' ' . $row['apellido_paterno'] . ' ' . $row['apellido_materno'], 'UTF-8'),
    'estatus' => mb_strtoupper($row['estatus_actual'], 'UTF-8')
  ];

  $total++;
}

echo json_encode([
  'success' => true,
  'total_aspirantes' => $total,
  'data' => $agrupado
]);
