<?php

// Incluir el archivo de conexión a la base de datos
require('config/conexion.php');

// Columnas a mostrar en la tabla
$columns = ['idcita', 'fecha', 'usuario', 'atendida', 'carnet', 'nombres', 'carrera', 'grado', 'seccion', 'plan', 'comentario'];

// Nombre de la tabla
$table = "cita";

// Clave principal de la tabla
$id = 'idcita';

// Campo a buscar (si hay búsqueda)
$campo = isset($_POST['campo']) ? $conexion->real_escape_string($_POST['campo']) : null;

// Filtrado
$where = '';
if ($campo !== null) {
    $where = "WHERE (";
    $cont = count($columns);
    for ($i = 0; $i < $cont; $i++) {
        $where .= $columns[$i] . " LIKE '%" . $campo . "%' OR ";
    }
    $where = rtrim($where, ' OR ');
    $where .= ")";
}

// Limites y paginación
$limit = isset($_POST['registros']) ? intval($_POST['registros']) : 10;
$pagina = isset($_POST['pagina']) ? intval($_POST['pagina']) : 1;

$inicio = ($pagina - 1) * $limit;
$sLimit = "LIMIT $inicio, $limit";

// Ordenamiento
$sOrder = "";
if (isset($_POST['orderCol']) && isset($columns[intval($_POST['orderCol'])])) {
    $orderCol = intval($_POST['orderCol']);
    $orderType = isset($_POST['orderType']) ? $conexion->real_escape_string($_POST['orderType']) : 'asc';
    if (in_array($orderType, ['asc', 'desc'])) {
        $sOrder = "ORDER BY " . $columns[$orderCol] . ' ' . $orderType;
    }
}

// Consulta para obtener los registros
$sql = "SELECT SQL_CALC_FOUND_ROWS " . implode(", ", $columns) . " FROM $table $where $sOrder $sLimit";
$resultado = $conexion->query($sql);
if (!$resultado) {
    die("Error en la consulta: " . $conexion->error);
}
$num_rows = $resultado->num_rows;

// Consulta para el total de registros filtrados
$sqlFiltro = "SELECT FOUND_ROWS()";
$resFiltro = $conexion->query($sqlFiltro);
if (!$resFiltro) {
    die("Error en la consulta de filtro: " . $conexion->error);
}
$row_filtro = $resFiltro->fetch_array();
$totalFiltro = $row_filtro[0];

// Consulta para el total de registros en la base de datos
$sqlTotal = "SELECT COUNT($id) FROM $table";
$resTotal = $conexion->query($sqlTotal);
if (!$resTotal) {
    die("Error en la consulta total: " . $conexion->error);
}
$row_total = $resTotal->fetch_array();
$totalRegistros = $row_total[0];

// Estructura de salida en formato JSON
$output = [];
$output['totalRegistros'] = $totalRegistros;
$output['totalFiltro'] = $totalFiltro;
$output['data'] = '';
$output['paginacion'] = '';

// Procesar resultados
if ($num_rows > 0) {
    while ($row = $resultado->fetch_assoc()) {
        $output['data'] .= '<tr>';
        $output['data'] .= '<td>' . htmlspecialchars($row['idcita'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['fecha'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['usuario'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['atendida'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['carnet'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['nombres'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['carrera'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['grado'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['seccion'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['plan'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['comentario'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td><a class="btn btn-warning btn-sm" href="Formularios/editarcita.php?idcita=' . urlencode($row['idcita']) . '">Editar</a></td>';
        $output['data'] .= '<td><a class="btn btn-danger btn-sm" href="crud/eliminarcita.php?idcita=' . urlencode($row['idcita']) . '">Eliminar</a></td>';
        $output['data'] .= '<td><button class="btn btn-info btn-sm" onclick="imprimircita(' . $row['idcita'] . ')">Imprimir</button></td>';
        $output['data'] .= '</tr>';
    }
} else {
    $output['data'] .= '<tr><td colspan="12">Sin resultados</td></tr>';
}

// Paginación
if ($totalRegistros > 0) {
    $totalPaginas = ceil($totalFiltro / $limit);
    $output['paginacion'] .= '<nav><ul class="pagination">';

    if ($pagina > 1) {
        $output['paginacion'] .= '<li class="page-item"><a class="page-link" href="#" onclick="nextPage(1)">Primera</a></li>';
        $output['paginacion'] .= '<li class="page-item"><a class="page-link" href="#" onclick="nextPage(' . ($pagina - 1) . ')">Anterior</a></li>';
    }

    $numeroInicio = max(1, $pagina - 4);
    $numeroFin = min($totalPaginas, $numeroInicio + 9);

    for ($i = $numeroInicio; $i <= $numeroFin; $i++) {
        $output['paginacion'] .= '<li class="page-item' . ($pagina == $i ? ' active' : '') . '"><a class="page-link" href="#" onclick="nextPage(' . $i . ')">' . $i . '</a></li>';
    }

    if ($pagina < $totalPaginas) {
        $output['paginacion'] .= '<li class="page-item"><a class="page-link" href="#" onclick="nextPage(' . ($pagina + 1) . ')">Siguiente</a></li>';
        $output['paginacion'] .= '<li class="page-item"><a class="page-link" href="#" onclick="nextPage(' . $totalPaginas . ')">Última</a></li>';
    }

    $output['paginacion'] .= '</ul></nav>';
}

// Enviar la respuesta como JSON
header('Content-Type: application/json');
echo json_encode($output, JSON_UNESCAPED_UNICODE);