<?php

require('config/conexion.php');

// Columnas a mostrar en la tabla
$columns = ['id', 'nombre', 'estado'];

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

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

// Campo a buscar
$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
$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
$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 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 total de registros
$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];

// Mostrando resultados
$output = [];
$output['totalRegistros'] = $totalRegistros;
$output['totalFiltro'] = $totalFiltro;
$output['data'] = '';
$output['paginacion'] = '';

if ($num_rows > 0) {
    while ($row = $resultado->fetch_assoc()) {
        $output['data'] .= '<tr>';
        $output['data'] .= '<td>' . htmlspecialchars($row['id'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['nombre'], ENT_QUOTES, 'UTF-8') . '</td>';
        $output['data'] .= '<td>' . htmlspecialchars($row['estado'], ENT_QUOTES, 'UTF-8') . '</td>';


        $output['data'] .= '<td><a class="btn btn-warning btn-sm" href="Formularios/formeditarrol.php?id=' . urlencode($row['id']) . '">Editar</a></td>';
        $output['data'] .= '<td><a class="btn btn-danger btn-sm" href="crud/eliminarrol.php?id=' . urlencode($row['id']) . '">Eliminar</a></td>';
        $output['data'] .= '</tr>';
    }
} else {
    $output['data'] .= '<tr>';
    $output['data'] .= '<td colspan="4">Sin resultados</td>'; // Asegúrate de que el colspan coincida con el número de columnas
    $output['data'] .= '</tr>';
}

// Paginación
if ($totalRegistros > 0) {
    $totalPaginas = ceil($totalFiltro / $limit);

    $output['paginacion'] .= '<nav>';
    $output['paginacion'] .= '<ul class="pagination">';

    // Enlace a la primera página y página anterior
    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>';
    }

    // Enlaces a las páginas intermedias
    $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' : '') . '">';
        $output['paginacion'] .= '<a class="page-link" href="#" onclick="nextPage(' . $i . ')">' . $i . '</a>';
        $output['paginacion'] .= '</li>';
    }

    // Enlace a la última página y página siguiente
    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>';
    $output['paginacion'] .= '</nav>';
}

echo json_encode($output, JSON_UNESCAPED_UNICODE);
