<?php
session_start();
$_SESSION['url'] = $_SERVER['REQUEST_URI'];

if (!isset($_SESSION['id'])) {
    header('Location: login.php');
    exit;
}

require_once('conex2.php');
$conexion = conectar();

if (!$conexion) {
    die('Error: no se pudo conectar a la base de datos.');
}

mysqli_set_charset($conexion, 'utf8');

function escapar($valor)
{
    return htmlspecialchars((string)$valor, ENT_QUOTES, 'UTF-8');
}

function construirUrlPagina($pagina, $busqueda, $vista)
{
    $params = array(
        'pagina' => (int)$pagina,
        'vista' => $vista
    );

    if ($busqueda !== '') {
        $params['t'] = $busqueda;
    }

    return '?' . http_build_query($params);
}

function construirUrlVista($vista, $busqueda)
{
    $params = array(
        'vista' => $vista
    );

    if ($busqueda !== '') {
        $params['t'] = $busqueda;
    }

    return '?' . http_build_query($params);
}

$nombreUsuarioBusqueda = '';
if (isset($_GET['t'])) {
    $nombreUsuarioBusqueda = trim($_GET['t']);
}

$vistaActual = isset($_GET['vista']) ? trim($_GET['vista']) : 'datos';
if ($vistaActual !== 'datos' && $vistaActual !== 'pendientes') {
    $vistaActual = 'datos';
}

$porPagina = 10;
$paginaActual = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1;

if ($paginaActual < 1) {
    $paginaActual = 1;
}

$busquedaLike = '%' . $nombreUsuarioBusqueda . '%';
$totalPacientes = 0;
$pacientes = array();

/*
|--------------------------------------------------------------------------
| CONSULTA PARA TAB DATOS DE PACIENTE
|--------------------------------------------------------------------------
*/
if ($vistaActual === 'datos') {
    $sqlTotal = "SELECT COUNT(*) AS total
                 FROM inb.paciente p
                 WHERE CONCAT(
                        apellido_paterno_paciente, ' ',
                        apellido_materno_paciente, ' ',
                        nombre_paciente
                 ) LIKE ?";

    $stmtTotal = mysqli_prepare($conexion, $sqlTotal);

    if (!$stmtTotal) {
        die('Error al preparar total: ' . mysqli_error($conexion));
    }

    mysqli_stmt_bind_param($stmtTotal, 's', $busquedaLike);
    mysqli_stmt_execute($stmtTotal);
    mysqli_stmt_bind_result($stmtTotal, $totalPacientes);
    mysqli_stmt_fetch($stmtTotal);
    mysqli_stmt_close($stmtTotal);

    $totalPacientes = (int)$totalPacientes;
    $totalPaginas = ($totalPacientes > 0) ? (int)ceil($totalPacientes / $porPagina) : 1;

    if ($paginaActual > $totalPaginas) {
        $paginaActual = $totalPaginas;
    }

    $offset = ($paginaActual - 1) * $porPagina;

    $sqlPacientes = "SELECT 
                        p.clave_paciente,
                        CONCAT(
                            p.apellido_paterno_paciente, ' ',
                            p.apellido_materno_paciente, ' ',
                            p.nombre_paciente
                        ) AS nombre,
                        p.fecha_nacimiento_paciente,
                        p.sexo_paciente,
                        p.semanas_gestacion,
                        DATE_ADD(
                            p.fecha_nacimiento_paciente,
                            INTERVAL +(39 - IF(p.semanas_gestacion > 39, 39, p.semanas_gestacion)) WEEK
                        ) AS fecha_edad_corregida
                     FROM inb.paciente p
                     WHERE CONCAT(
                            p.apellido_paterno_paciente, ' ',
                            p.apellido_materno_paciente, ' ',
                            p.nombre_paciente
                     ) LIKE ?
                     ORDER BY p.clave_paciente DESC
                     LIMIT ?, ?";

    $stmtPacientes = mysqli_prepare($conexion, $sqlPacientes);

    if (!$stmtPacientes) {
        die('Error al preparar pacientes: ' . mysqli_error($conexion));
    }

    mysqli_stmt_bind_param($stmtPacientes, 'sii', $busquedaLike, $offset, $porPagina);
    mysqli_stmt_execute($stmtPacientes);

    mysqli_stmt_bind_result(
        $stmtPacientes,
        $clavePaciente,
        $nombrePaciente,
        $fechaNacimiento,
        $sexoPaciente,
        $semanasGestacion,
        $fechaEdadCorregida
    );

    while (mysqli_stmt_fetch($stmtPacientes)) {
        $pacientes[] = array(
            'clave_paciente' => $clavePaciente,
            'nombre' => $nombrePaciente,
            'fecha_nacimiento_paciente' => $fechaNacimiento,
            'sexo_paciente' => $sexoPaciente,
            'semanas_gestacion' => $semanasGestacion,
            'fecha_edad_corregida' => $fechaEdadCorregida,
            'ultimo_mes_estudio' => null,
            'siguiente_mes' => null
        );
    }

    mysqli_stmt_close($stmtPacientes);
} else {
    /*
    |--------------------------------------------------------------------------
    | CONSULTA PARA TAB EVALUACIONES PENDIENTES
    | Pacientes pendientes desde el mes 3 hasta el mes 8
    |--------------------------------------------------------------------------
    */
    $sqlTotalPendientes = "SELECT COUNT(*) AS total
                           FROM (
                               SELECT p.clave_paciente
                               FROM inb.paciente p
                               LEFT JOIN inb.visualauditiva v
                                   ON v.clave_paciente = p.clave_paciente
                               WHERE CONCAT(
                                        p.apellido_paterno_paciente, ' ',
                                        p.apellido_materno_paciente, ' ',
                                        p.nombre_paciente
                               ) LIKE ?
                               GROUP BY p.clave_paciente
                               HAVING GREATEST(COALESCE(MAX(v.mes_estudio), 0) + 1, 3) <= 8
                           ) AS pendientes";

    $stmtTotal = mysqli_prepare($conexion, $sqlTotalPendientes);

    if (!$stmtTotal) {
        die('Error al preparar total pendientes: ' . mysqli_error($conexion));
    }

    mysqli_stmt_bind_param($stmtTotal, 's', $busquedaLike);
    mysqli_stmt_execute($stmtTotal);
    mysqli_stmt_bind_result($stmtTotal, $totalPacientes);
    mysqli_stmt_fetch($stmtTotal);
    mysqli_stmt_close($stmtTotal);

    $totalPacientes = (int)$totalPacientes;
    $totalPaginas = ($totalPacientes > 0) ? (int)ceil($totalPacientes / $porPagina) : 1;

    if ($paginaActual > $totalPaginas) {
        $paginaActual = $totalPaginas;
    }

    $offset = ($paginaActual - 1) * $porPagina;

$sqlPendientes = "SELECT 
                    p.clave_paciente,
                    CONCAT(
                        p.apellido_paterno_paciente, ' ',
                        p.apellido_materno_paciente, ' ',
                        p.nombre_paciente
                    ) AS nombre,
                    p.fecha_nacimiento_paciente,
                    p.sexo_paciente,
                    p.semanas_gestacion,
                    DATE_ADD(
                        p.fecha_nacimiento_paciente,
                        INTERVAL +(39 - IF(p.semanas_gestacion > 39, 39, p.semanas_gestacion)) WEEK
                    ) AS fecha_edad_corregida,
                    COALESCE(MAX(v.mes_estudio), 0) AS ultimo_mes_estudio,
                    GREATEST(COALESCE(MAX(v.mes_estudio), 0) + 1, 3) AS siguiente_mes
                 FROM inb.paciente p
                 LEFT JOIN inb.visualauditiva v
                    ON v.clave_paciente = p.clave_paciente
                 WHERE CONCAT(
                        p.apellido_paterno_paciente, ' ',
                        p.apellido_materno_paciente, ' ',
                        p.nombre_paciente
                 ) LIKE ?
                 GROUP BY 
                    p.clave_paciente,
                    p.apellido_paterno_paciente,
                    p.apellido_materno_paciente,
                    p.nombre_paciente,
                    p.fecha_nacimiento_paciente,
                    p.sexo_paciente,
                    p.semanas_gestacion
                 HAVING GREATEST(COALESCE(MAX(v.mes_estudio), 0) + 1, 3) <= 8
                 ORDER BY siguiente_mes ASC, p.clave_paciente DESC
                 LIMIT ?, ?";

    $stmtPacientes = mysqli_prepare($conexion, $sqlPendientes);

    if (!$stmtPacientes) {
        die('Error al preparar pendientes: ' . mysqli_error($conexion));
    }

    mysqli_stmt_bind_param($stmtPacientes, 'sii', $busquedaLike, $offset, $porPagina);
    mysqli_stmt_execute($stmtPacientes);

    mysqli_stmt_bind_result(
        $stmtPacientes,
        $clavePaciente,
        $nombrePaciente,
        $fechaNacimiento,
        $sexoPaciente,
        $semanasGestacion,
        $fechaEdadCorregida,
        $ultimoMesEstudio,
        $siguienteMes
    );

    while (mysqli_stmt_fetch($stmtPacientes)) {
        $pacientes[] = array(
            'clave_paciente' => $clavePaciente,
            'nombre' => $nombrePaciente,
            'fecha_nacimiento_paciente' => $fechaNacimiento,
            'sexo_paciente' => $sexoPaciente,
            'semanas_gestacion' => $semanasGestacion,
            'fecha_edad_corregida' => $fechaEdadCorregida,
            'ultimo_mes_estudio' => $ultimoMesEstudio,
            'siguiente_mes' => $siguienteMes
        );
    }

    mysqli_stmt_close($stmtPacientes);
}

$inicioRegistro = ($totalPacientes > 0) ? ($offset + 1) : 0;
$finRegistro = ($totalPacientes > 0) ? min($offset + $porPagina, $totalPacientes) : 0;

$inicioPaginacion = max(1, $paginaActual - 2);
$finPaginacion = min($totalPaginas, $paginaActual + 2);

if (($finPaginacion - $inicioPaginacion) < 4) {
    if ($inicioPaginacion == 1) {
        $finPaginacion = min($totalPaginas, $inicioPaginacion + 4);
    } elseif ($finPaginacion == $totalPaginas) {
        $inicioPaginacion = max(1, $finPaginacion - 4);
    }
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Evaluación visual - auditiva</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles/index.css">
    <link rel="stylesheet" href="styles/header.css">
</head>
<body>
<?php $tituloPagina = 'Evaluación Visual-Auditiva'; ?>
<?php require_once('includes/header.php'); ?>

<main class="page">
    <section class="search-bar">
        <form action="" method="GET" class="search-form">
            <input type="hidden" name="vista" value="<?php echo escapar($vistaActual); ?>">

            <div class="search-field">
                <input
                    type="text"
                    name="t"
                    value="<?php echo escapar($nombreUsuarioBusqueda); ?>"
                    placeholder="Buscar nombre(s):"
                    autocomplete="off"
                >
            </div>

            <button type="submit" class="btn-search">Buscar Resultado</button>
        </form>
    </section>

    <section class="content-panel">
        <div class="panel-tabs">
            <a
                href="<?php echo escapar(construirUrlVista('datos', $nombreUsuarioBusqueda)); ?>"
                class="panel-tab panel-tab--link <?php echo ($vistaActual === 'datos') ? 'panel-tab--active panel-tab--blue' : 'panel-tab--inactive'; ?>"
            >
                Datos de Paciente
            </a>

            <a
                href="<?php echo escapar(construirUrlVista('pendientes', $nombreUsuarioBusqueda)); ?>"
                class="panel-tab panel-tab--link <?php echo ($vistaActual === 'pendientes') ? 'panel-tab--active panel-tab--gold' : 'panel-tab--inactive'; ?>"
            >
                Evaluaciones Pendientes
            </a>
        </div>

        <div class="table-scroll-wrap">
            <div class="table-scroll-hint table-scroll-hint--tablet">
                <span class="table-scroll-hint__icon">⇠ ⇢</span>
                <span class="table-scroll-hint__text">Desliza la tabla de izquierda a derecha para ver más columnas</span>
            </div>

            <div class="table-responsive">
                <table class="patient-table">
                    <thead>
                        <tr>
                            <th>Clave Paciente</th>
                            <th>Nombre</th>
                            <th>Fecha Nacimiento</th>
                            <th>Sexo</th>
                            <th>Semanas Gestación</th>
                            <th>Fecha Edad Corregida</th>

                            <?php if ($vistaActual === 'pendientes') { ?>
                                <th>Mes Pendiente</th>
                            <?php } ?>

                            <th>Evaluación</th>
                            <th>Resultados</th>
                            <th>Factores</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (!empty($pacientes)) { ?>
                            <?php foreach ($pacientes as $imprime) { ?>
                                <tr>
                                    <td><?php echo escapar($imprime['clave_paciente']); ?></td>
                                    <td><?php echo escapar($imprime['nombre']); ?></td>
                                    <td><?php echo escapar($imprime['fecha_nacimiento_paciente']); ?></td>
                                    <td><?php echo escapar($imprime['sexo_paciente']); ?></td>
                                    <td><?php echo escapar($imprime['semanas_gestacion']); ?></td>
                                    <td><?php echo escapar($imprime['fecha_edad_corregida']); ?></td>

                                    <?php if ($vistaActual === 'pendientes') { ?>
                                        <td>
                                            <span class="pending-badge">
                                                Mes <?php echo escapar($imprime['siguiente_mes']); ?>
                                            </span>
                                        </td>
                                    <?php } ?>

                                    <td>
                                        <form action="evaluacionVisual.php" method="POST" class="action-form">
                                            <button
                                                type="submit"
                                                name="clavePaciente"
                                                value="<?php echo escapar($imprime['clave_paciente']); ?>"
                                                class="btn-action btn-action--primary"
                                            >
                                                Evaluación
                                            </button>
                                        </form>
                                    </td>

                                    <td>
                                        <form action="resultadosPaciente.php" method="POST" class="action-form">
                                            <button
                                                type="submit"
                                                name="clavePaciente"
                                                value="<?php echo escapar($imprime['clave_paciente']); ?>"
                                                class="btn-action btn-action--icon"
                                                title="Ver resultados"
                                            >
                                                &#128196;
                                            </button>
                                        </form>
                                    </td>

                                    <td>
                                        <form action="factores.php" method="POST" class="action-form">
                                            <input
                                                type="hidden"
                                                name="nombrePaciente"
                                                value="<?php echo escapar($imprime['nombre']); ?>"
                                            >
                                            <button
                                                type="submit"
                                                name="clavePaciente"
                                                value="<?php echo escapar($imprime['clave_paciente']); ?>"
                                                class="btn-action btn-action--icon"
                                                title="Factores"
                                            >
                                                &#9776;
                                            </button>
                                        </form>
                                    </td>
                                </tr>
                            <?php } ?>
                        <?php } else { ?>
                            <tr>
                                <td colspan="<?php echo ($vistaActual === 'pendientes') ? '10' : '9'; ?>" class="no-results">
                                    <?php echo ($vistaActual === 'pendientes') ? 'No hay pacientes con evaluaciones pendientes.' : 'No se encontraron pacientes.'; ?>
                                </td>
                            </tr>
                        <?php } ?>
                    </tbody>
                </table>
            </div>
        </div>

        <div class="table-footer">
            <div class="table-footer__info">
                Mostrando <?php echo $inicioRegistro; ?> - <?php echo $finRegistro; ?> de <?php echo $totalPacientes; ?>
                <?php echo ($vistaActual === 'pendientes') ? 'pacientes pendientes' : 'pacientes'; ?>
            </div>

            <div class="table-footer__links">
                <a href="login.php?salir=1">Cerrar sesión</a>
                <a href="all.php">Consultar todo</a>
                <?php if (isset($_SESSION['level']) && $_SESSION['level'] == 2) { ?>
                    <a href="nuevo.php">Agregar usuario</a>
                <?php } ?>
            </div>
        </div>

        <?php if ($totalPaginas > 1) { ?>
            <nav class="pagination">
                <?php if ($paginaActual > 1) { ?>
                    <a href="<?php echo escapar(construirUrlPagina($paginaActual - 1, $nombreUsuarioBusqueda, $vistaActual)); ?>" class="pagination__item">
                        Anterior
                    </a>
                <?php } ?>

                <?php for ($i = $inicioPaginacion; $i <= $finPaginacion; $i++) { ?>
                    <a
                        href="<?php echo escapar(construirUrlPagina($i, $nombreUsuarioBusqueda, $vistaActual)); ?>"
                        class="pagination__item <?php echo ($i == $paginaActual) ? 'is-active' : ''; ?>"
                    >
                        <?php echo $i; ?>
                    </a>
                <?php } ?>

                <?php if ($paginaActual < $totalPaginas) { ?>
                    <a href="<?php echo escapar(construirUrlPagina($paginaActual + 1, $nombreUsuarioBusqueda, $vistaActual)); ?>" class="pagination__item">
                        Siguiente
                    </a>
                <?php } ?>
            </nav>
        <?php } ?>
    </section>
</main>

</body>
</html>