<?php
/*
|--------------------------------------------------------------------------
| Inicio de sesion y seguridad basica
|--------------------------------------------------------------------------
*/
session_start();
$_SESSION['url'] = $_SERVER['REQUEST_URI'];

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

header('Content-Type: text/html; charset=UTF-8');

require_once('conex2.php');

/*
|--------------------------------------------------------------------------
| Compatibilidad con proyectos viejos
|--------------------------------------------------------------------------
*/
if (!function_exists('obtener_conexion_actual')) {
    function obtener_conexion_actual() {
        static $conexionDetectada = null;

        if ($conexionDetectada instanceof mysqli) {
            return $conexionDetectada;
        }

        $posiblesConexiones = array(
            'con', 'conexion', 'conn', 'mysqli', 'link', 'db', 'bd'
        );

        foreach ($posiblesConexiones as $nombreVariable) {
            if (isset($GLOBALS[$nombreVariable]) && $GLOBALS[$nombreVariable] instanceof mysqli) {
                $conexionDetectada = $GLOBALS[$nombreVariable];
                break;
            }
        }

        if (!$conexionDetectada && function_exists('conectar')) {
            $conexionDetectada = conectar();
        }

        if (!$conexionDetectada || !($conexionDetectada instanceof mysqli)) {
            die('Error: no se encontro una conexion valida a la base de datos en conex2.php');
        }

        mysqli_set_charset($conexionDetectada, 'utf8');
        mysqli_query($conexionDetectada, "SET NAMES utf8");
        mysqli_query($conexionDetectada, "SET CHARACTER SET utf8");
        mysqli_query($conexionDetectada, "SET collation_connection = 'utf8_unicode_ci'");

        return $conexionDetectada;
    }
}

/*
|--------------------------------------------------------------------------
| Funciones puente para codigo antiguo
|--------------------------------------------------------------------------
*/
if (!function_exists('resultados_mysql')) {
    function resultados_mysql($query) {
        $conexion = obtener_conexion_actual();
        $resultado = mysqli_query($conexion, $query);

        if (!$resultado) {
            die('Error en la consulta SQL: ' . mysqli_error($conexion));
        }

        return $resultado;
    }
}

if (!function_exists('mysql_fetch_assoc')) {
    function mysql_fetch_assoc($resultado) {
        return mysqli_fetch_assoc($resultado);
    }
}

if (!function_exists('mysql_num_rows')) {
    function mysql_num_rows($resultado) {
        return mysqli_num_rows($resultado);
    }
}

/*
|--------------------------------------------------------------------------
| Utilidades de salida y formato
|--------------------------------------------------------------------------
*/
function escapar($valor) {
    return htmlspecialchars((string)$valor, ENT_QUOTES, 'UTF-8');
}

function arreglarTextoMojibake($texto) {
    $texto = (string)$texto;

    $reemplazos = array(
        'Ã¡' => 'á',
        'Ã©' => 'é',
        'Ã­' => 'í',
        'Ã³' => 'ó',
        'Ãº' => 'ú',
        'Ã' => 'Á',
        'Ã‰' => 'É',
        'Ã' => 'Í',
        'Ã“' => 'Ó',
        'Ãš' => 'Ú',
        'Ã±' => 'ñ',
        'Ã‘' => 'Ñ',
        'Ã¼' => 'ü',
        'Ãœ' => 'Ü',
        'Â¿' => '¿',
        'Â¡' => '¡',
        'â€“' => '–',
        'â€”' => '—',
        'â€œ' => '“',
        'â€' => '”',
        'â€˜' => '‘',
        'â€™' => '’'
    );

    return strtr($texto, $reemplazos);
}

function mostrarDato($valor, $fallback = '—') {
    if ($valor === null) {
        return $fallback;
    }

    $valor = trim((string)$valor);

    if ($valor === '' || strtoupper($valor) === 'NULL') {
        return $fallback;
    }

    return arreglarTextoMojibake($valor);
}

function formatearFecha($fecha) {
    $fecha = trim((string)$fecha);

    if ($fecha === '' || $fecha === '0000-00-00' || $fecha === '0000-00-00 00:00:00') {
        return '—';
    }

    $timestamp = strtotime($fecha);

    if ($timestamp === false) {
        return arreglarTextoMojibake($fecha);
    }

    return date('Y-m-d', $timestamp);
}

function claseClasificacion($valor) {
    $valor = strtolower(trim((string)$valor));

    if ($valor === 'normal') {
        return 'badge badge--normal';
    }

    if ($valor === 'deficiente') {
        return 'badge badge--deficiente';
    }

    if ($valor === 'acelerado') {
        return 'badge badge--acelerado';
    }

    return 'badge';
}

function construirUrl($pagina, $busqueda, $porPagina) {
    $params = array(
        'pagina' => (int)$pagina,
        'por_pagina' => (int)$porPagina
    );

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

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

function imprimirCeldaTexto($valor, $claseExtra = '') {
    $clases = trim('cell-text ' . $claseExtra);

    echo '<td>';
    echo '<div class="' . escapar($clases) . '" title="' . escapar($valor) . '">';
    echo escapar($valor);
    echo '</div>';
    echo '</td>';
}

function imprimirCeldaBadge($valorOriginal, $valorMostrado) {
    echo '<td>';
    echo '<div class="cell-badge" title="' . escapar($valorMostrado) . '">';
    echo '<span class="' . escapar(claseClasificacion($valorOriginal)) . '">';
    echo escapar($valorMostrado);
    echo '</span>';
    echo '</div>';
    echo '</td>';
}

/*
|--------------------------------------------------------------------------
| Parametros de busqueda y paginacion
|--------------------------------------------------------------------------
*/
$conexion = obtener_conexion_actual();

$nombreUsuarioBusqueda = isset($_GET['txtBusqueda']) ? trim($_GET['txtBusqueda']) : '';
$porPagina             = isset($_GET['por_pagina'])  ? (int)$_GET['por_pagina']  : 5;
$paginaActual          = isset($_GET['pagina'])      ? (int)$_GET['pagina']      : 1;
$opcionesPorPagina     = array(5, 10, 50, 100);

if (!in_array($porPagina, $opcionesPorPagina, true)) {
    $porPagina = 5;
}

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

$busquedaEscapada = mysqli_real_escape_string($conexion, $nombreUsuarioBusqueda);

/*
|--------------------------------------------------------------------------
| Total de resultados
|--------------------------------------------------------------------------
*/
$sqlTotal = "
    SELECT COUNT(*) AS total
    FROM visualauditiva v
    INNER JOIN paciente p
        ON v.clave_paciente = p.clave_paciente
    WHERE CONCAT(
        COALESCE(p.apellido_paterno_paciente, ''), ' ',
        COALESCE(p.apellido_materno_paciente, ''), ' ',
        COALESCE(p.nombre_paciente, '')
    ) LIKE '%{$busquedaEscapada}%'
";

$resTotal        = resultados_mysql($sqlTotal);
$filaTotal       = mysql_fetch_assoc($resTotal);
$totalResultados = isset($filaTotal['total']) ? (int)$filaTotal['total'] : 0;
$totalPaginas    = ($totalResultados > 0) ? (int)ceil($totalResultados / $porPagina) : 1;

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

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

/*
|--------------------------------------------------------------------------
| Datos paginados
|--------------------------------------------------------------------------
*/
$query = "
    SELECT
        CONCAT(
            COALESCE(p.apellido_paterno_paciente, ''), ' ',
            COALESCE(p.apellido_materno_paciente, ''), ' ',
            COALESCE(p.nombre_paciente, '')
        ) AS nombre,
        v.id_numero_estudio,
        v.mes_estudio,
        p.semanas_gestacion,
        CASE
            WHEN p.semanas_gestacion IS NULL
              OR TRIM(CAST(p.semanas_gestacion AS CHAR)) = ''
              OR p.fecha_nacimiento_paciente IS NULL
              OR p.fecha_nacimiento_paciente = '0000-00-00'
              OR p.fecha_nacimiento_paciente = '0000-00-00 00:00:00'
            THEN NULL
            WHEN CAST(p.semanas_gestacion AS UNSIGNED) >= 40
            THEN p.fecha_nacimiento_paciente
            ELSE DATE_ADD(
                p.fecha_nacimiento_paciente,
                INTERVAL (40 - CAST(p.semanas_gestacion AS UNSIGNED)) WEEK
            )
        END AS fecha_edad_corregida,
        v.fecha_estudio,
        v.totalVisual,
        v.percentilVisual,
        v.clasificacionVisual,
        v.totalAuditiva,
        v.percentilAuditiva,
        v.clasificacionAuditiva,
        v.totalEstudio,
        v.percentilEstudio,
        v.clasificacionEstudio,
        v.observaciones
    FROM visualauditiva v
    INNER JOIN paciente p
        ON v.clave_paciente = p.clave_paciente
    WHERE CONCAT(
        COALESCE(p.apellido_paterno_paciente, ''), ' ',
        COALESCE(p.apellido_materno_paciente, ''), ' ',
        COALESCE(p.nombre_paciente, '')
    ) LIKE '%{$busquedaEscapada}%'
    ORDER BY v.fecha_estudio DESC, v.id_numero_estudio DESC
    LIMIT {$offset}, {$porPagina}
";

$consultaResultados = resultados_mysql($query);
$resultados = array();

while ($fila = mysql_fetch_assoc($consultaResultados)) {
    $resultados[] = $fila;
}

/*
|--------------------------------------------------------------------------
| Calculos de pie de tabla
|--------------------------------------------------------------------------
*/
$inicioRegistro = ($totalResultados > 0) ? ($offset + 1) : 0;
$finRegistro    = ($totalResultados > 0) ? min($offset + $porPagina, $totalResultados) : 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);
    }
}

$tituloPagina = 'Evaluación visual - auditiva';

/* ---- URL de exportación (respeta el filtro activo) ---- */
$urlExportar = 'exportar_visual_auditiva.php?' . http_build_query(
    array('txtBusqueda' => $nombreUsuarioBusqueda)
);
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="utf-8">
    <title>Consulta</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles/total.css">
</head>
<body>

<?php if (file_exists(__DIR__ . '/includes/header.php')) { ?>
    <?php require_once('includes/header.php'); ?>
<?php } else { ?>
    <header class="topbar">
        <div class="topbar__inner">
            <div class="topbar__logo topbar__logo--left">
                <img src="img/UINDLogo.png" alt="Logo izquierdo">
            </div>

            <div class="topbar__title">
                <h1><?php echo escapar($tituloPagina); ?></h1>
            </div>

            <div class="topbar__logo topbar__logo--right">
                <img src="img/UNAMLogoBlanco.png" alt="Logo derecho">
            </div>
        </div>
    </header>
<?php } ?>

<main class="page">
    <section class="consulta-card">
        <div class="consulta-card__header">

            <div class="consulta-card__search">
                <form action="" method="GET" class="search-form">
                    <div class="search-field">
                        <input
                            type="text"
                            name="txtBusqueda"
                            value="<?php echo escapar($nombreUsuarioBusqueda); ?>"
                            placeholder="Nombre"
                            autocomplete="off"
                        >
                    </div>

                    <input type="hidden" name="por_pagina" value="<?php echo $porPagina; ?>">
                    <button type="submit" name="btnBusqueda" class="btn-search">Buscar</button>
                </form>
            </div>

            <div class="consulta-card__actions">
                <a href="index.php" class="btn-inicio">Inicio</a>
                <a
                    href="<?php echo escapar($urlExportar); ?>"
                    class="btn-exportar"
                    title="Descargar todos los resultados en Excel"
                >Exportar Excel</a>
            </div>

            <div class="consulta-card__title-wrap">
                <h1 id="h1TituloPaciente">Consulta</h1>
            </div>
        </div>

        <div class="tabla-card">
            <div class="divTabla">
                <table class="miTabla">
                    <colgroup>
                        <col class="col-nombre">
                        <col class="col-mes">
                        <col class="col-num">
                        <col class="col-fecha">
                        <col class="col-num">
                        <col class="col-num">
                        <col class="col-clas">
                        <col class="col-num">
                        <col class="col-num">
                        <col class="col-clas">
                        <col class="col-num">
                        <col class="col-num">
                        <col class="col-clas">
                        <col class="col-obs">
                    </colgroup>

                    <thead>
                        <tr>
                            <th>Nombre paciente</th>
                            <th>Mes de evaluación</th>
                            <th>Semanas de gestación</th>
                            <th>Fecha edad corregida</th>
                            <th>Puntaje total visual</th>
                            <th>Percentil visual</th>
                            <th>Clasificación visual</th>
                            <th>Puntaje total auditivo</th>
                            <th>Percentil auditivo</th>
                            <th>Clasificación auditivo</th>
                            <th>Puntaje total estudio</th>
                            <th>Percentil total estudio</th>
                            <th>Clasificación total estudio</th>
                            <th>Observaciones</th>
                        </tr>
                    </thead>

                    <tbody>
                        <?php if (!empty($resultados)) { ?>
                            <?php foreach ($resultados as $imprime) { ?>
                                <?php
                                    $nombre                 = mostrarDato($imprime['nombre']);
                                    $mes                    = mostrarDato($imprime['mes_estudio']);
                                    $semanasGestacion       = mostrarDato($imprime['semanas_gestacion']);
                                    $fechaEdadCorregida     = formatearFecha($imprime['fecha_edad_corregida']);
                                    $totalVisual            = mostrarDato($imprime['totalVisual']);
                                    $percentilVisual        = mostrarDato($imprime['percentilVisual']);
                                    $clasificacionVisual    = mostrarDato($imprime['clasificacionVisual']);
                                    $totalAuditiva          = mostrarDato($imprime['totalAuditiva']);
                                    $percentilAuditiva      = mostrarDato($imprime['percentilAuditiva']);
                                    $clasificacionAuditiva  = mostrarDato($imprime['clasificacionAuditiva']);
                                    $totalEstudio           = mostrarDato($imprime['totalEstudio']);
                                    $percentilEstudio       = mostrarDato($imprime['percentilEstudio']);
                                    $clasificacionEstudio   = mostrarDato($imprime['clasificacionEstudio']);
                                    $observaciones          = mostrarDato($imprime['observaciones']);
                                ?>

                                <tr>
                                    <?php imprimirCeldaTexto($nombre, 'cell-text--name'); ?>
                                    <?php imprimirCeldaTexto($mes); ?>
                                    <?php imprimirCeldaTexto($semanasGestacion); ?>
                                    <?php imprimirCeldaTexto($fechaEdadCorregida); ?>
                                    <?php imprimirCeldaTexto($totalVisual); ?>
                                    <?php imprimirCeldaTexto($percentilVisual); ?>
                                    <?php imprimirCeldaBadge($imprime['clasificacionVisual'], $clasificacionVisual); ?>
                                    <?php imprimirCeldaTexto($totalAuditiva); ?>
                                    <?php imprimirCeldaTexto($percentilAuditiva); ?>
                                    <?php imprimirCeldaBadge($imprime['clasificacionAuditiva'], $clasificacionAuditiva); ?>
                                    <?php imprimirCeldaTexto($totalEstudio); ?>
                                    <?php imprimirCeldaTexto($percentilEstudio); ?>
                                    <?php imprimirCeldaBadge($imprime['clasificacionEstudio'], $clasificacionEstudio); ?>
                                    <?php imprimirCeldaTexto($observaciones, 'cell-text--obs'); ?>
                                </tr>
                            <?php } ?>
                        <?php } else { ?>
                            <tr>
                                <td colspan="14" class="no-results">No se encontraron resultados.</td>
                            </tr>
                        <?php } ?>
                    </tbody>
                </table>
            </div>

            <div class="table-footer">
                <div class="table-footer__info">
                    Mostrando <?php echo $inicioRegistro; ?> a <?php echo $finRegistro; ?> de <?php echo $totalResultados; ?> resultados
                </div>

                <div class="table-footer__pagination">
                    <?php if ($paginaActual > 1) { ?>
                        <a href="<?php echo escapar(construirUrl($paginaActual - 1, $nombreUsuarioBusqueda, $porPagina)); ?>" class="pagination-btn">Anterior</a>
                    <?php } else { ?>
                        <span class="pagination-btn is-disabled">Anterior</span>
                    <?php } ?>

                    <?php for ($p = $inicioPaginacion; $p <= $finPaginacion; $p++) { ?>
                        <a href="<?php echo escapar(construirUrl($p, $nombreUsuarioBusqueda, $porPagina)); ?>" class="pagination-number <?php echo ($p === $paginaActual) ? 'is-active' : ''; ?>">
                            <?php echo $p; ?>
                        </a>
                    <?php } ?>

                    <?php if ($paginaActual < $totalPaginas) { ?>
                        <a href="<?php echo escapar(construirUrl($paginaActual + 1, $nombreUsuarioBusqueda, $porPagina)); ?>" class="pagination-btn">Siguiente</a>
                    <?php } else { ?>
                        <span class="pagination-btn is-disabled">Siguiente</span>
                    <?php } ?>
                </div>

                <div class="table-footer__per-page">
                    <form action="" method="GET" class="per-page-form">
                        <input type="hidden" name="txtBusqueda" value="<?php echo escapar($nombreUsuarioBusqueda); ?>">

                        <label for="por_pagina">Registros por página:</label>

                        <select name="por_pagina" id="por_pagina" onchange="this.form.submit()">
                            <?php foreach ($opcionesPorPagina as $opcion) { ?>
                                <option value="<?php echo $opcion; ?>" <?php echo ($porPagina === $opcion) ? 'selected' : ''; ?>>
                                    <?php echo $opcion; ?>
                                </option>
                            <?php } ?>
                        </select>
                    </form>
                </div>
            </div>
        </div>
    </section>
</main>

</body>
</html>