<?php
require_once '../config/Database.php'; 

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $input = json_decode(file_get_contents('php://input'), true);
  $tipoConsulta = $input['tipoConsulta'] ?? '';

    $graficos = new Graficos();

    // Casos especiales para tarjetas de promedio
    if (
        $tipoConsulta === "Femenino" ||
        $tipoConsulta === "Masculino" ||
        $tipoConsulta === "Prefiero no decirlo"
    ) {
        $cantidad = $graficos->obtenerCantidadPorGenero($tipoConsulta);
        echo json_encode(["cantidad" => $cantidad]);
        exit;
    }

  // Solo un filtro a la vez
  $filtros = [];
  if (!empty($input['id_rango_edad'])) $filtros['id_rango_edad'] = $input['id_rango_edad'];
  else if (!empty($input['id_genero'])) $filtros['id_genero'] = $input['id_genero'];
  else if (!empty($input['id_examen'])) $filtros['id_examen'] = $input['id_examen'];
  else if (!empty($input['fechaInicio']) && !empty($input['fechaFin'])) {
      $filtros['fechaInicio'] = $input['fechaInicio'];
      $filtros['fechaFin'] = $input['fechaFin'];
  }

  switch ($tipoConsulta) {
      case 'Generos':
          $cantidad = $graficos->obtenerGeneros($filtros);
          echo json_encode($cantidad);
          exit;
      case 'Edades':
          $cantidad = $graficos->obtenerEdades($filtros);
          echo json_encode($cantidad);
          exit;
      case 'Estados':
          $cantidad = $graficos->obtenerEstados($filtros);
          echo json_encode($cantidad);
          exit;
      case 'Examenes':
          $cantidad = $graficos->obtenerExamenes($filtros);
          echo json_encode($cantidad);
          exit;
      case 'Fechas':
          $cantidad = $graficos->obtenerFechas($filtros);
          echo json_encode($cantidad);
          exit;
      case 'ResumenGenero': // NUEVO
          $cantidad = $graficos->obtenerResumenGenero($filtros);
          echo json_encode($cantidad);
          exit;
      default:
          echo json_encode([]);
          exit;
  }
}

class Graficos{
 private $Database;
 protected $db;
 
 public function __construct() {
     $this->Database = new Database();
     $this->db = $this->Database->getInstance();
 }


  // NUEVO: Para tarjetas de promedio
    public function obtenerCantidadPorGenero($genero) {
        $sql = "SELECT COUNT(*) as cantidad
                FROM candidato c
                INNER JOIN genero g ON c.id_genero = g.id_genero
                WHERE g.descripcion = ?";
        $query = $this->db->prepare($sql);
        $query->bind_param("s", $genero);
        $query->execute();
        $resultado = $query->get_result();
        $row = $resultado->fetch_assoc();
        $query->close();
        return intval($row['cantidad']);
    }

 // Gráfico de Géneros
 public function obtenerGeneros($filtros = []) {
    $sql = "SELECT g.descripcion AS genero, COUNT(*) AS cantidad
            FROM candidato c
            INNER JOIN genero g ON c.id_genero = g.id_genero
            WHERE 1=1";
    $params = [];
    $types = "";

    if (!empty($filtros['id_genero'])) {
        $sql .= " AND c.id_genero = ?";
        $params[] = $filtros['id_genero'];
        $types .= "i";
    }
    if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) {
        $sql .= " AND DATE(c.fecha_entrada) >= ? AND DATE(c.fecha_entrada) <= ?";
        $params[] = $filtros['fechaInicio'];
        $params[] = $filtros['fechaFin'];
        $types .= "ss";
    }
    $sql .= " GROUP BY g.descripcion ORDER BY g.descripcion";

    $query = $this->db->prepare($sql);
    if ($params) $query->bind_param($types, ...$params);
    $query->execute();
    $resultado = $query->get_result();

    $generos = [];
    while ($data = $resultado->fetch_assoc()) {
        $generos[] = $data;
    }
    $query->close();
    return $generos;
 }

 // Gráfico de Edades
 public function obtenerEdades($filtros = []) {
    $sql = "SELECT r.descripcion AS rango_edad, COUNT(*) AS cantidad
            FROM candidato c
            INNER JOIN rango_edad r ON c.id_rango_edad = r.id_rango_edad
            WHERE 1=1";
    $params = [];
    $types = "";

    if (!empty($filtros['id_rango_edad'])) {
        $sql .= " AND c.id_rango_edad = ?";
        $params[] = $filtros['id_rango_edad'];
        $types .= "i";
    }
    if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) {
        $sql .= " AND DATE(c.fecha_entrada) >= ? AND DATE(c.fecha_entrada) <= ?";
        $params[] = $filtros['fechaInicio'];
        $params[] = $filtros['fechaFin'];
        $types .= "ss";
    }
    $sql .= " GROUP BY r.descripcion ORDER BY r.id_rango_edad";

    $query = $this->db->prepare($sql);
    if ($params) $query->bind_param($types, ...$params);
    $query->execute();
    $resultado = $query->get_result();

    $edades = [];
    while ($data = $resultado->fetch_assoc()) {
        $edades[] = $data;
    }
    $query->close();
    return $edades;
 }

 // Gráfico de Estados
 public function obtenerEstados($filtros = []) {
    $sql = "SELECT e.nombre AS estado, COUNT(*) AS cantidad
            FROM info_candidatos i
            INNER JOIN estados e ON i.id_estado = e.id
            WHERE 1=1";
    $params = [];
    $types = "";

    if (!empty($filtros['id_estado'])) {
        $sql .= " AND i.id_estado = ?";
        $params[] = $filtros['id_estado'];
        $types .= "i";
    }
    if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) {
        $sql .= " AND DATE(i.fecha_entrada) >= ? AND DATE(i.fecha_entrada) <= ?";
        $params[] = $filtros['fechaInicio'];
        $params[] = $filtros['fechaFin'];
        $types .= "ss";
    }
    $sql .= " GROUP BY e.nombre ORDER BY e.nombre";

    $query = $this->db->prepare($sql);
    if ($params) $query->bind_param($types, ...$params);
    $query->execute();
    $resultado = $query->get_result();

    $estados = [];
    while ($data = $resultado->fetch_assoc()) {
        $estados[] = $data;
    }
    $query->close();
    return $estados;
 }

 // Gráfico de Exámenes
 public function obtenerExamenes($filtros = []) {
    $sql = "SELECT ex.nombre_examen AS examen, COUNT(*) AS cantidad
            FROM candidato c
            INNER JOIN examen ex ON c.id_examen = ex.id_examen
            WHERE 1=1";
    $params = [];
    $types = "";

    if (!empty($filtros['id_examen'])) {
        $sql .= " AND c.id_examen = ?";
        $params[] = $filtros['id_examen'];
        $types .= "i";
    }
    if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) {
        $sql .= " AND DATE(c.fecha_entrada) >= ? AND DATE(c.fecha_entrada) <= ?";
        $params[] = $filtros['fechaInicio'];
        $params[] = $filtros['fechaFin'];
        $types .= "ss";
    }
    $sql .= " GROUP BY ex.nombre_examen ORDER BY ex.nombre_examen";

    $query = $this->db->prepare($sql);
    if ($params) $query->bind_param($types, ...$params);
    $query->execute();
    $resultado = $query->get_result();

    $examenes = [];
    while ($data = $resultado->fetch_assoc()) {
        $examenes[] = $data;
    }
    $query->close();
    return $examenes;
 }

 // Gráfico de Fechas
 public function obtenerFechas($filtros = []) {
    $sql = "SELECT COUNT(*) AS cantidad
            FROM candidato
            WHERE 1=1";
    $params = [];
    $types = "";

    if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) {
        $sql .= " AND DATE(fecha_entrada) >= ? AND DATE(fecha_entrada) <= ?";
        $params[] = $filtros['fechaInicio'];
        $params[] = $filtros['fechaFin'];
        $types .= "ss";
    }

    $query = $this->db->prepare($sql);
    if ($params) $query->bind_param($types, ...$params);
    $query->execute();
    $resultado = $query->get_result();

    $fechas = [];
    while ($data = $resultado->fetch_assoc()) {
        $fechas[] = $data;
    }
    $query->close();
    return $fechas;
 }

 public function obtenerResumenGenero($filtros = []) {
    $sql = "SELECT g.descripcion AS genero, COUNT(*) AS cantidad
            FROM candidato c
            INNER JOIN genero g ON c.id_genero = g.id_genero
            WHERE 1=1";
    $params = [];
    $types = "";

    if (!empty($filtros['id_genero'])) {
        $sql .= " AND c.id_genero = ?";
        $params[] = $filtros['id_genero'];
        $types .= "i";
    }
    if (!empty($filtros['fechaInicio']) && !empty($filtros['fechaFin'])) {
        $sql .= " AND DATE(c.fecha_entrada) >= ? AND DATE(c.fecha_entrada) <= ?";
        $params[] = $filtros['fechaInicio'];
        $params[] = $filtros['fechaFin'];
        $types .= "ss";
    }
    $sql .= " GROUP BY g.descripcion ORDER BY g.descripcion";

    $query = $this->db->prepare($sql);
    if ($params) $query->bind_param($types, ...$params);
    $query->execute();
    $resultado = $query->get_result();

    $generos = [];
    while ($data = $resultado->fetch_assoc()) {
        $generos[] = $data;
    }
    $query->close();
    return $generos;
 }

}
?>