<?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 = '';
$condEstBanco = '';
$params = [];
$tipos = '';

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

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

$sql = "
  SELECT 
    COALESCE(s.estatus, 'asignado') as estatus,
    COUNT(*) AS total 
  FROM aspirantes a
  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'
        $condEstBanco
    )
    $condicionReclutadores
  GROUP BY COALESCE(s.estatus, 'asignado')
  ORDER BY total DESC
";

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

$data = [];
while ($row = $result->fetch_assoc()) {
  $estatus = strtoupper($row['estatus']);
  $estatus = strtr($estatus, "ÁÉÍÓÚÑÜáéíóúñü", "AEIOUNUAEIOUNU"); // quitar acentos
  $data[] = [
    'estatus' => $estatus,
    'total' => (int)$row['total']
  ];
}

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