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

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

require_once('conex2.php');

if (!function_exists('conectar')) {
    die('Error: no existe la función conectar() en conex2.php');
}

$conexion = conectar();

if (!$conexion) {
    die('Error de conexión a la base de datos');
}

if (method_exists($conexion, 'set_charset')) {
    $conexion->set_charset('utf8');
}

$miClavePaciente = trim($_POST['clavePaciente'] ?? $_GET['p'] ?? '');
$vistaActual = trim($_GET['vista'] ?? 'auditiva');

if ($miClavePaciente === '') {
    die('No se recibió la clave del paciente.');
}

if (!in_array($vistaActual, array('auditiva', 'visual', 'generales'), true)) {
    $vistaActual = 'auditiva';
}

/* =========================
   FUNCIONES GENERALES
========================= */
function e($valor)
{
    return htmlspecialchars((string)$valor, ENT_QUOTES, 'UTF-8');
}

function mostrarDato($valor, $fallback = '—')
{
    $valor = trim((string)$valor);
    return ($valor === '' || strtoupper($valor) === 'NULL') ? $fallback : $valor;
}

function tieneRespuesta($valor)
{
    $valor = trim((string)$valor);
    return ($valor !== '' && strtoupper($valor) !== 'NULL');
}

function construirUrlVista($clavePaciente, $vista)
{
    return 'resultadosPaciente.php?' . http_build_query(array(
        'p' => $clavePaciente,
        'vista' => $vista
    ));
}

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

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

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

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

    return 'status-badge';
}

/* =========================
   FUNCIONES PARA PREGUNTAS
========================= */
function recuperarTextosPreguntas($conexion)
{
    $textos = array();

    /*
     * Toma el comentario de las columnas si la BD lo tiene registrado.
     * Si no hay comentarios, el sistema usa los textos base o nombres genericos.
     */
    $sql = "SELECT COLUMN_NAME, COLUMN_COMMENT
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE TABLE_SCHEMA = DATABASE()
              AND TABLE_NAME = 'visualauditiva'
              AND COLUMN_NAME REGEXP '^[0-9]+[av]$'";

    $resultado = $conexion->query($sql);

    if ($resultado) {
        while ($fila = $resultado->fetch_assoc()) {
            $columna = trim((string)($fila['COLUMN_NAME'] ?? ''));
            $comentario = trim((string)($fila['COLUMN_COMMENT'] ?? ''));

            if ($columna !== '' && $comentario !== '') {
                $textos[$columna] = $comentario;
            }
        }
    }

    return $textos;
}

function obtenerColumnasPreguntas($estudios, $sufijo)
{
    $columnas = array();

    /*
     * Detecta columnas como 1a, 2a, 3a... o 1v, 2v, 3v...
     * Solo muestra preguntas que tengan al menos una respuesta registrada.
     */
    foreach ($estudios as $estudio) {
        foreach ($estudio as $columna => $valor) {
            $patron = '/^([0-9]+)' . preg_quote($sufijo, '/') . '$/';

            if (preg_match($patron, $columna, $coincidencias) && tieneRespuesta($valor)) {
                $columnas[$columna] = (int)$coincidencias[1];
            }
        }
    }

    asort($columnas, SORT_NUMERIC);

    return array_keys($columnas);
}

function textoPregunta($columna, $textosPreguntas, $preguntasBase)
{
    /*
     * Primero usa el catalogo fijo de preguntas.
     * Esto evita que salgan encabezados genericos si la BD no tiene comentarios.
     */
    if (isset($preguntasBase[$columna])) {
        return $preguntasBase[$columna];
    }

    /*
     * Si no existe en el catalogo fijo, intenta usar el comentario de la BD.
     */
    if (isset($textosPreguntas[$columna]) && trim((string)$textosPreguntas[$columna]) !== '') {
        return $textosPreguntas[$columna];
    }

    /*
     * Ultimo respaldo para columnas nuevas que aun no esten mapeadas.
     */
    if (preg_match('/^([0-9]+)([av])$/', $columna, $coincidencias)) {
        $numero = $coincidencias[1];
        $area = ($coincidencias[2] === 'a') ? 'auditiva' : 'visual';

        return 'Pregunta ' . $numero . ' ' . $area;
    }

    return $columna;
}

/* =========================
   RECUPERAR PACIENTE
========================= */
$misDatos = array(
    'clave_paciente' => '',
    'nombre' => 'Paciente no encontrado',
    'fecha_nacimiento_paciente' => '',
    'sexo_paciente' => '',
    'semanas_gestacion' => '',
    'fecha_edad_corregida' => ''
);

$sqlPaciente = "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 +(38 - IF(p.semanas_gestacion > 38, 38, p.semanas_gestacion)) WEEK
                    ) AS fecha_edad_corregida
                FROM paciente p
                WHERE p.clave_paciente = ?
                LIMIT 1";

$stmtPaciente = $conexion->prepare($sqlPaciente);

if (!$stmtPaciente) {
    die('Error al preparar consulta de paciente: ' . e($conexion->error));
}

$stmtPaciente->bind_param('s', $miClavePaciente);
$stmtPaciente->execute();
$resPaciente = $stmtPaciente->get_result();

if ($resPaciente && $resPaciente->num_rows > 0) {
    $misDatos = $resPaciente->fetch_assoc();
}

$stmtPaciente->close();

/* =========================
   RECUPERAR ESTUDIOS
========================= */
$estudios = array();

$sqlEstudios = "SELECT 
                    CONCAT(
                        'Días: ', v.edad_paciente_dias,
                        ' | Semanas: ', v.edad_paciente_semanas,
                        ' | Meses: ', v.edad_paciente_meses
                    ) AS MSI,
                    v.*,
                    CONCAT(e.nombre_encargada, ' ', e.apellido_paterno_encargada) AS nombreEncargada
                FROM visualauditiva v
                INNER JOIN visualauditivaencargada e
                    ON v.clave_encargada = e.clave_encargada
                WHERE v.clave_paciente = ?
                ORDER BY v.fecha_estudio ASC, v.id_numero_estudio ASC";

$stmtEstudios = $conexion->prepare($sqlEstudios);

if (!$stmtEstudios) {
    die('Error al preparar consulta de estudios: ' . e($conexion->error));
}

$stmtEstudios->bind_param('s', $miClavePaciente);
$stmtEstudios->execute();
$resEstudios = $stmtEstudios->get_result();

if ($resEstudios) {
    while ($fila = $resEstudios->fetch_assoc()) {
        $estudios[] = $fila;
    }
}

$stmtEstudios->close();

/* =========================
   PREPARAR PREGUNTAS
========================= */
$preguntasBase = array(
    /* Preguntas de evaluacion auditiva */
    '1a' => '1. Respuesta a la voz humana',
    '2a' => '2. Respuesta ante el sonido de una campana (30-45 cm)',
    '3a' => '3. Respuesta ante el sonido de una campana a la derecha',
    '4a' => '4. Respuesta ante sonidos de una campana a la izquierda',
    '5a' => '5. Respuesta ante la voz humana girando la cabeza',
    '6a' => '6. Respuesta ante sonidos de la campana girando la cabeza',
    '7a' => '7. Respuesta al escuchar su nombre',
    '8a' => '8. Respuesta ante la voz humana, localizando el origen de donde procede',
    '9a' => '9. Respuesta discriminativa ante dos estímulos auditivos diferentes',
    '10a' => '10. Respuesta ante el sonido de una sonaja que él agita',
    '11a' => '11. Seguimiento del sonido de una campana en dirección arriba-abajo',
    '12a' => '12. Seguimiento del sonido de una campana en dirección derecha-izquierda',
    '13a' => '13. Búsqueda de sonidos sentado con movimientos oculares',
    '14a' => '14. Repetición de sonidos cuando se le habla',

    /* Preguntas de evaluacion visual */
    '1v' => '1. Contacto visual con el adulto',
    '2v' => '2. Contacto visual con el adulto al desplazarse',
    '3v' => '3. Contemplación de tarjetas (25-30cm) en la línea media',
    '4v' => '4. Contemplación de tarjetas (90cm) en la línea media',
    '5v' => '5. Observación de tarjetas (25-30cm) a la derecha',
    '6v' => '6. Observación de tarjetas (25-30cm) a la izquierda',
    '7v' => '7. Seguimiento de tarjetas de la línea media a la derecha y a la izquierda, y viceversa',
    '8v' => '8. Observación de un anillo cercano (25-30cm) en la línea media por 3 segundos',
    '9v' => '9. Observación de su imagen frente al espejo (distancia 20cm)',
    '10v' => '10. Fijación discriminativa entre dos tarjetas',
    '11v' => '11. Seguimiento del desplazamiento de tarjetas aumentando la distancia (45-90cm)',
    '12v' => '12. Seguimiento del desplazamiento del anillo horizontalmente',
    '13v' => '13. Seguimiento del desplazamiento del anillo verticalmente',
    '14v' => '14. Seguimiento del desplazamiento del anillo circularmente',
    '15v' => '15. Seguimiento del desplazamiento de la tarjeta de derecha a izquierda, girando completamente la cabeza',
    '16v' => '16. Seguimiento del desplazamiento de la tarjeta arriba-abajo flexionando y extendiendo completamente el cuello',
    '17v' => '17. Observación de un cubo pequeño por 3 segundos',
    '18v' => '18. Observación, prensión y manipulación de un anillo',
    '19v' => '19. Observación, prensión y manipulación de un anillo oscilante',
    '20v' => '20. Seguimiento visual y prensión de una varilla',
    '21v' => '21. Seguimiento visual del trayecto de una pelota, con intento de tomarla',
    '22v' => '22. Observación de una ficha',
    '23v' => '23. Observación y aproximación a su imagen frente al espejo',
    '24v' => '24. Seguimiento de la caída de un globo',
    '25v' => '25. Alcanzar cubos colocados sobre la mesa',
    '26v' => '26. Localización de una pelota oculta',
    '27v' => '27. Observación y manipulación de la cuerda atada al anillo',
    '28v' => '28. Búsqueda del rostro familiar oculto',
    '29v' => '29. Estirar la mano al observar su imagen frente al espejo',
    '30v' => '30. Tomar una pastilla y llevarla a la boca',
    '31v' => '31. Tomar objetos y golpearlos sobre la mesa',
    '32v' => '32. Tomar dos cubos con las manos'
);

$textosPreguntas = recuperarTextosPreguntas($conexion);
$columnasAuditivas = obtenerColumnasPreguntas($estudios, 'a');
$columnasVisuales = obtenerColumnasPreguntas($estudios, 'v');

/* =========================
   RECUPERAR AREA
========================= */
$area = array(
    'area_procedencia' => 'Sin área registrada'
);

$sqlArea = "SELECT area_procedencia
            FROM visualauditivaprocedencia
            WHERE clave_paciente = ?
            LIMIT 1";

$stmtArea = $conexion->prepare($sqlArea);

if (!$stmtArea) {
    die('Error al preparar consulta de área: ' . e($conexion->error));
}

$stmtArea->bind_param('s', $miClavePaciente);
$stmtArea->execute();
$resArea = $stmtArea->get_result();

if ($resArea && $resArea->num_rows > 0) {
    $area = $resArea->fetch_assoc();
}

$stmtArea->close();

/* =========================
   RECUPERAR FACTORES RIESGO
========================= */
$misRiesgos = array();

$sqlRiesgo = "SELECT Factor_de_riesgo
              FROM visualauditivafactoresriesgo
              WHERE clave_paciente = ?";

$stmtRiesgo = $conexion->prepare($sqlRiesgo);

if (!$stmtRiesgo) {
    die('Error al preparar consulta de factores de riesgo: ' . e($conexion->error));
}

$stmtRiesgo->bind_param('s', $miClavePaciente);
$stmtRiesgo->execute();
$resRiesgo = $stmtRiesgo->get_result();

if ($resRiesgo && $resRiesgo->num_rows > 0) {
    while ($filaRiesgo = $resRiesgo->fetch_assoc()) {
        $misRiesgos[] = $filaRiesgo['Factor_de_riesgo'];
    }
} else {
    $misRiesgos[] = 'Paciente sin factores de riesgo';
}

$stmtRiesgo->close();

/* =========================
   OBSERVACIONES PARA VISTA GENERAL
========================= */
$observacionesGenerales = array();

foreach ($estudios as $estudioTmp) {
    $obsTmp = trim((string)($estudioTmp['observaciones'] ?? ''));

    if ($obsTmp !== '') {
        $observacionesGenerales[] = 'Mes ' . ($estudioTmp['mes_estudio'] ?? '—') . ': ' . $obsTmp;
    }
}

if (empty($observacionesGenerales)) {
    $observacionesGenerales[] = 'Sin observaciones registradas.';
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="utf-8">
    <title>Resultados paciente</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="styles/header.css">
    <link rel="stylesheet" href="styles/resultados.css">
</head>
<body>
    <?php
        $tituloPagina = 'Resultados Paciente';
        require_once('includes/header.php');
    ?>

    <main class="results-page">
        <section class="results-card">
            <div class="patient-summary">
                <div class="patient-summary__main">
                    <h1 class="patient-summary__name"><?php echo e($misDatos['nombre']); ?></h1>
                    <div class="patient-summary__meta">
                        <span><?php echo e(mostrarDato($misDatos['fecha_nacimiento_paciente'])); ?></span>
                        <span><?php echo e(mostrarDato($misDatos['sexo_paciente'])); ?></span>
                        <span><?php echo e(mostrarDato($misDatos['semanas_gestacion'])); ?> semanas de gestación</span>
                        <span><?php echo e(mostrarDato($misDatos['fecha_edad_corregida'])); ?> edad corregida</span>
                    </div>
                </div>

                <div class="patient-summary__actions">
                    <a href="index.php" class="patient-summary__back">Inicio</a>
                </div>
            </div>

            <nav class="results-tabs">
                <a
                    href="<?php echo e(construirUrlVista($miClavePaciente, 'auditiva')); ?>"
                    class="results-tab results-tab--blue <?php echo ($vistaActual === 'auditiva') ? 'is-active' : ''; ?>"
                >
                    Resultados Auditivos
                </a>

                <a
                    href="<?php echo e(construirUrlVista($miClavePaciente, 'visual')); ?>"
                    class="results-tab results-tab--gold <?php echo ($vistaActual === 'visual') ? 'is-active' : ''; ?>"
                >
                    Resultados Visuales
                </a>

                <a
                    href="<?php echo e(construirUrlVista($miClavePaciente, 'generales')); ?>"
                    class="results-tab results-tab--green <?php echo ($vistaActual === 'generales') ? 'is-active' : ''; ?>"
                >
                    Resultados Generales
                </a>
            </nav>

            <?php if ($vistaActual === 'auditiva') { ?>
                <div class="info-box info-box--single">
                    <h3>Factores de riesgo:</h3>
                    <p><?php echo e(implode(', ', $misRiesgos)); ?></p>
                </div>

                <section class="results-section">
                    <h2 class="results-section__title">Resultados de Evaluación Auditiva</h2>

                    <div class="table-wrap">
                        <table id="tablaAuditiva">
                            <thead>
                                <tr>
                                    <th>Num. Estudio</th>
                                    <th>Clave de Paciente</th>
                                    <th>Fecha Evaluación</th>
                                    <th>Mes de evaluación</th>
                                    <th>Encargada</th>

                                    <?php foreach ($columnasAuditivas as $columnaPregunta) { ?>
                                        <th><?php echo e(textoPregunta($columnaPregunta, $textosPreguntas, $preguntasBase)); ?></th>
                                    <?php } ?>

                                    <th>Puntaje total</th>
                                    <th>Percentil</th>
                                    <th>Clasificación</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php if (count($estudios) > 0) { ?>
                                    <?php foreach ($estudios as $imprime) { ?>
                                        <tr>
                                            <td><?php echo e($imprime['id_numero_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime['clave_paciente'] ?? ''); ?></td>
                                            <td><?php echo e($imprime['fecha_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime['mes_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime['nombreEncargada'] ?? ''); ?></td>

                                            <?php foreach ($columnasAuditivas as $columnaPregunta) { ?>
                                                <td><?php echo e(mostrarDato($imprime[$columnaPregunta] ?? '')); ?></td>
                                            <?php } ?>

                                            <td><?php echo e($imprime['totalAuditiva'] ?? ''); ?></td>
                                            <td><?php echo e($imprime['percentilAuditiva'] ?? ''); ?></td>
                                            <td>
                                                <span class="<?php echo e(claseClasificacion($imprime['clasificacionAuditiva'] ?? '')); ?>">
                                                    <?php echo e(mostrarDato($imprime['clasificacionAuditiva'] ?? '')); ?>
                                                </span>
                                            </td>
                                        </tr>
                                    <?php } ?>
                                <?php } else { ?>
                                    <tr>
                                        <td colspan="<?php echo 8 + count($columnasAuditivas); ?>">
                                            No hay resultados de evaluación auditiva para este paciente.
                                        </td>
                                    </tr>
                                <?php } ?>
                            </tbody>
                        </table>
                    </div>
                </section>

            <?php } elseif ($vistaActual === 'visual') { ?>
                <div class="info-box info-box--single">
                    <h3>Factores de riesgo:</h3>
                    <p><?php echo e(implode(', ', $misRiesgos)); ?></p>
                </div>

                <section class="results-section">
                    <h2 class="results-section__title">Resultados de Evaluación Visual</h2>

                    <div class="table-wrap">
                        <table id="tablaVisual">
                            <thead>
                                <tr>
                                    <th>Num. Estudio</th>
                                    <th>Clave de Paciente</th>
                                    <th>Fecha Evaluación</th>
                                    <th>Mes de evaluación</th>
                                    <th>Encargada</th>

                                    <?php foreach ($columnasVisuales as $columnaPregunta) { ?>
                                        <th><?php echo e(textoPregunta($columnaPregunta, $textosPreguntas, $preguntasBase)); ?></th>
                                    <?php } ?>

                                    <th>Puntaje total</th>
                                    <th>Percentil</th>
                                    <th>Clasificación</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php if (count($estudios) > 0) { ?>
                                    <?php foreach ($estudios as $imprime2) { ?>
                                        <tr>
                                            <td><?php echo e($imprime2['id_numero_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime2['clave_paciente'] ?? ''); ?></td>
                                            <td><?php echo e($imprime2['fecha_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime2['mes_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime2['nombreEncargada'] ?? ''); ?></td>

                                            <?php foreach ($columnasVisuales as $columnaPregunta) { ?>
                                                <td><?php echo e(mostrarDato($imprime2[$columnaPregunta] ?? '')); ?></td>
                                            <?php } ?>

                                            <td><?php echo e($imprime2['totalVisual'] ?? ''); ?></td>
                                            <td><?php echo e($imprime2['percentilVisual'] ?? ''); ?></td>
                                            <td>
                                                <span class="<?php echo e(claseClasificacion($imprime2['clasificacionVisual'] ?? '')); ?>">
                                                    <?php echo e(mostrarDato($imprime2['clasificacionVisual'] ?? '')); ?>
                                                </span>
                                            </td>
                                        </tr>
                                    <?php } ?>
                                <?php } else { ?>
                                    <tr>
                                        <td colspan="<?php echo 8 + count($columnasVisuales); ?>">
                                            No hay resultados de evaluación visual para este paciente.
                                        </td>
                                    </tr>
                                <?php } ?>
                            </tbody>
                        </table>
                    </div>
                </section>

            <?php } else { ?>
                <div class="info-box info-box--single">
                    <h3>Resultados Generales</h3>
                </div>

                <section class="results-section">
                    <div class="table-wrap">
                        <table id="tablaResultados">
                            <thead>
                                <tr>
                                    <th>Mes de evaluación</th>
                                    <th>Fecha Evaluación</th>
                                    <th>Encargada</th>
                                    <th>Puntuación escala visual</th>
                                    <th>Percentil</th>
                                    <th>Clasificación</th>
                                    <th>Puntuación escala auditiva</th>
                                    <th>Percentil</th>
                                    <th>Clasificación</th>
                                    <th>Puntuación total</th>
                                    <th>Percentil</th>
                                    <th>Clasificación</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php if (count($estudios) > 0) { ?>
                                    <?php foreach ($estudios as $imprime3) { ?>
                                        <tr>
                                            <td><?php echo e($imprime3['mes_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime3['fecha_estudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime3['nombreEncargada'] ?? ''); ?></td>
                                            <td><?php echo e($imprime3['totalVisual'] ?? ''); ?></td>
                                            <td><?php echo e($imprime3['percentilVisual'] ?? ''); ?></td>
                                            <td>
                                                <span class="<?php echo e(claseClasificacion($imprime3['clasificacionVisual'] ?? '')); ?>">
                                                    <?php echo e(mostrarDato($imprime3['clasificacionVisual'] ?? '')); ?>
                                                </span>
                                            </td>
                                            <td><?php echo e($imprime3['totalAuditiva'] ?? ''); ?></td>
                                            <td><?php echo e($imprime3['percentilAuditiva'] ?? ''); ?></td>
                                            <td>
                                                <span class="<?php echo e(claseClasificacion($imprime3['clasificacionAuditiva'] ?? '')); ?>">
                                                    <?php echo e(mostrarDato($imprime3['clasificacionAuditiva'] ?? '')); ?>
                                                </span>
                                            </td>
                                            <td><?php echo e($imprime3['totalEstudio'] ?? ''); ?></td>
                                            <td><?php echo e($imprime3['percentilEstudio'] ?? ''); ?></td>
                                            <td>
                                                <span class="<?php echo e(claseClasificacion($imprime3['clasificacionEstudio'] ?? '')); ?>">
                                                    <?php echo e(mostrarDato($imprime3['clasificacionEstudio'] ?? '')); ?>
                                                </span>
                                            </td>
                                        </tr>
                                    <?php } ?>
                                <?php } else { ?>
                                    <tr>
                                        <td colspan="12">No hay resultados generales para este paciente.</td>
                                    </tr>
                                <?php } ?>
                            </tbody>
                        </table>
                    </div>

                    <div class="observations-panel">
                        <h3>Observaciones:</h3>
                        <div class="observations-box">
                            <?php foreach ($observacionesGenerales as $obs) { ?>
                                <p><?php echo e($obs); ?></p>
                            <?php } ?>
                        </div>
                    </div>
                </section>
            <?php } ?>
        </section>
    </main>
</body>
</html>
