<?php
// Iniciar sesión y proteger la página
session_start();
if (!isset($_SESSION['usuario_id']) || $_SESSION['usuario_rol'] !== 'admin') {
    header('Location: login.php');
    exit;
}

require_once 'config/conexion.php';

// Variables para el filtro de fechas
$fecha_inicio = isset($_POST['fecha_inicio']) ? $_POST['fecha_inicio'] : '';
$fecha_fin = isset($_POST['fecha_fin']) ? $_POST['fecha_fin'] : '';
$mostrar_resultados = false;

// Array para almacenar los resultados filtrados
$reporte_final = [];
$datos_grafico_agrupado = [
    'labels' => [],
    'turno1' => [],
    'turno2' => [],
];

?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>📊 Dashboard de Pulsaciones</title>
    
    <!-- Estilos CSS -->
    <link rel="stylesheet" href="css/estilos.css">
    
    <!-- Chart.js para gráficos -->
    <script src="https://cdn.jsdelivr.net/npm/chart.js@3.9.1/dist/chart.min.js"></script>
    <!-- Plugin para etiquetas en el gráfico -->
    <script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.1.0/dist/chartjs-plugin-datalabels.min.js"></script>
</head>
<body>

    <div class="container">
        
        <!-- ENCABEZADO -->
        <header>
            <div class="header-usuario">
                <span>Hola, <?php echo htmlspecialchars($_SESSION['usuario_nombre']); ?> (Admin)</span>
                <a href="logout.php">Cerrar Sesión</a>
            </div>
            <h1>📊 Dashboard de Contadores y Pulsaciones</h1>
            <p>Panel de control para visualizar y analizar datos de pulsaciones</p>
        </header>

        <!-- SECCIÓN 1: PANEL DE CONTADORES -->
        <section class="panel-contadores">
            <h2 id="toggle-contadores" class="toggle collapsed">🔢 Contadores Activos</h2>
            
            <div id="contadores-grid-wrapper" style="display: none;">
                <?php
                // Consulta para obtener todos los contadores
                $sql_contadores = "SELECT id, nombre, contador, ultima_pulsacion FROM contadores ORDER BY nombre";
                $resultado_contadores = $conexion->query($sql_contadores);
                
                if ($resultado_contadores->num_rows > 0) {
                    echo '<div class="grid-contadores">';
                    
                    // Recorrer cada contador
                    while ($contador = $resultado_contadores->fetch_assoc()) {
                        ?>
                        <div class="tarjeta-contador">
                            <h3><?php echo htmlspecialchars($contador['nombre']); ?></h3>
                            <div class="numero-contador"><?php echo $contador['contador']; ?></div>
                            <p class="ultima-pulsacion">
                                Última pulsación: 
                                <?php 
                                echo $contador['ultima_pulsacion'] 
                                    ? date('d/m/Y H:i', strtotime($contador['ultima_pulsacion'])) 
                                    : 'Nunca'; 
                                ?>
                            </p>

                        </div>
                        <?php
                    }
                    
                    echo '</div>';
                } else {
                    echo '<p class="mensaje-info">No hay contadores registrados.</p>';
                }
                ?>
            </div>
        </section>

        <hr>

        <!-- SECCIÓN 2: FILTRO DE FECHAS -->
        <section class="panel-filtros">
            <h2>🔍 Filtrar Pulsaciones de Domingos</h2>
            
            <form method="POST" action="" class="formulario-filtro">
                <div class="grupo-filtro">
                    <label for="fecha_inicio">📅 Fecha de Inicio:</label>
                    <input type="datetime-local" 
                           id="fecha_inicio" 
                           name="fecha_inicio" 
                           value="<?php echo $fecha_inicio; ?>" 
                           required>
                </div>
                
                <div class="grupo-filtro">
                    <label for="fecha_fin">📅 Fecha de Fin:</label>
                    <input type="datetime-local" 
                           id="fecha_fin" 
                           name="fecha_fin" 
                           value="<?php echo $fecha_fin; ?>" 
                           required>
                </div>
                
                <button type="submit" class="btn btn-filtrar">🔎 Aplicar Filtro</button>
            </form>
        </section>

        <?php
        // SECCIÓN 3: PROCESAR FILTRO Y MOSTRAR RESULTADOS
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && $fecha_inicio && $fecha_fin) {
            $mostrar_resultados = true;
            
            $fecha_inicio_sql = date('Y-m-d H:i:s', strtotime($fecha_inicio));
            $fecha_fin_sql = date('Y-m-d H:i:s', strtotime($fecha_fin));

            $sql_pulsaciones = "SELECT nombre_persona, fecha_hora 
                               FROM pulsaciones 
                               WHERE fecha_hora BETWEEN ? AND ? AND DAYOFWEEK(fecha_hora) = 1
                               ORDER BY fecha_hora ASC";

            $stmt = $conexion->prepare($sql_pulsaciones);
            $stmt->bind_param("ss", $fecha_inicio_sql, $fecha_fin_sql);
            $stmt->execute();
            $resultado_pulsaciones = $stmt->get_result();

            while ($pulsacion = $resultado_pulsaciones->fetch_assoc()) {
                $timestamp = strtotime($pulsacion['fecha_hora']);
                $fecha = date('Y-m-d', $timestamp);
                $nombre = $pulsacion['nombre_persona'];
                $clave = $fecha . '|' . $nombre;

                if (!isset($reporte_final[$clave])) {
                    $reporte_final[$clave] = [
                        'nombre' => $nombre,
                        'fecha' => $fecha,
                        'turno1' => 0,
                        'turno2' => 0,
                    ];
                }

                $hora_numerica = (int)date('H', $timestamp);
                $minutos = (int)date('i', $timestamp);
                $tiempo_total = $hora_numerica * 60 + $minutos;

                if ($tiempo_total >= 420 && $tiempo_total <= 660) { // Turno 1
                    $reporte_final[$clave]['turno1']++;
                } elseif ($tiempo_total >= 661 && $tiempo_total <= 840) { // Turno 2
                    $reporte_final[$clave]['turno2']++;
                }
            }
            $stmt->close();

            // Preparar datos para el gráfico agrupado por persona
            $temp_agregado = [];
            foreach ($reporte_final as $fila) {
                $nombre = $fila['nombre'];
                if (!isset($temp_agregado[$nombre])) {
                    $temp_agregado[$nombre] = ['turno1' => 0, 'turno2' => 0];
                }
                $temp_agregado[$nombre]['turno1'] += $fila['turno1'];
                $temp_agregado[$nombre]['turno2'] += $fila['turno2'];
            }

            $datos_grafico_agrupado['labels'] = array_keys($temp_agregado);
            foreach ($temp_agregado as $datos_persona) {
                $datos_grafico_agrupado['turno1'][] = $datos_persona['turno1'];
                $datos_grafico_agrupado['turno2'][] = $datos_persona['turno2'];
            }
        }
        ?>

        <!-- SECCIÓN 4: MOSTRAR RESULTADOS -->
        <?php if ($mostrar_resultados): ?>
        <section class="panel-resultados">
            <div class="panel-resultados-header">
                <h2>📋 Resultados del Filtro (Domingos)</h2>
                <?php if (count($reporte_final) > 0): ?>
                <form method="POST" action="generar_pdf.php" target="_blank">
                    <input type="hidden" name="fecha_inicio" value="<?php echo $fecha_inicio; ?>">
                    <input type="hidden" name="fecha_fin" value="<?php echo $fecha_fin; ?>">
                    <button type="submit" class="btn btn-pdf">📄 Descargar PDF</button>
                </form>
                <?php endif; ?>
            </div>
            
            <?php if (count($reporte_final) > 0): ?>
            
            <!-- Tabla de Resultados -->
            <div class="tabla-responsive">
                <table class="tabla-resultados">
                    <thead>
                        <tr>
                            <th>📅 Fecha</th>
                            <th>👤 Persona</th>
                            <th>Turno 1 (07:00-11:00)</th>
                            <th>Turno 2 (11:01-14:00)</th>
                            <th>🔢 Total Día</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php 
                        $total_turno1 = 0;
                        $total_turno2 = 0;
                        $total_general = 0;
                        foreach ($reporte_final as $fila): 
                            $total_dia = $fila['turno1'] + $fila['turno2'];
                            $total_turno1 += $fila['turno1'];
                            $total_turno2 += $fila['turno2'];
                            $total_general += $total_dia;
                        ?>
                        <tr>
                            <td><?php echo date('d/m/Y', strtotime($fila['fecha'])); ?></td>
                            <td><?php echo htmlspecialchars($fila['nombre']); ?></td>
                            <td style="text-align: center;"><?php echo $fila['turno1']; ?></td>
                            <td style="text-align: center;"><?php echo $fila['turno2']; ?></td>
                            <td class="numero-destacado" style="text-align: center;"><?php echo $total_dia; ?></td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                     <tfoot>
                        <tr>
                            <td colspan="2" style="text-align: right; font-weight: bold;">TOTALES</td>
                            <td style="text-align: center;" class="numero-destacado"><?php echo $total_turno1; ?></td>
                            <td style="text-align: center;" class="numero-destacado"><?php echo $total_turno2; ?></td>
                            <td style="text-align: center;" class="numero-destacado"><?php echo $total_general; ?></td>
                        </tr>
                    </tfoot>
                </table>
            </div>
            
            <!-- Gráfico de Pulsaciones por Persona y Turno -->
            <div class="contenedor-graficos">
                <div class="tarjeta-grafico">
                    <h3>📊 Pulsaciones por Persona y Turno</h3>
                    <canvas id="graficoPulsacionesTurno"></canvas>
                </div>
            </div>
            
            <?php else: ?>
            <p class="mensaje-info">No se encontraron pulsaciones de domingos en el rango de fechas seleccionado.</p>
            <?php endif; ?>
        </section>
        <?php endif; ?>

    </div>

    <!-- SCRIPTS DE GRÁFICOS -->
    <script>
    <?php if ($mostrar_resultados && count($reporte_final) > 0): ?>
    
    // Registrar el plugin de etiquetas
    Chart.register(ChartDataLabels);

    // Gráfico de Pulsaciones por Persona y Turno
    const ctxPulsaciones = document.getElementById('graficoPulsacionesTurno').getContext('2d');
    const graficoPulsacionesTurno = new Chart(ctxPulsaciones, {
        type: 'bar',
        data: {
            labels: <?php echo json_encode($datos_grafico_agrupado['labels']); ?>,
            datasets: [
                {
                    label: 'Turno 1',
                    data: <?php echo json_encode($datos_grafico_agrupado['turno1']); ?>,
                    backgroundColor: 'rgba(95, 158, 160, 0.7)', // CadetBlue
                    borderColor: '#5F9EA0',
                    borderWidth: 1
                },
                {
                    label: 'Turno 2',
                    data: <?php echo json_encode($datos_grafico_agrupado['turno2']); ?>,
                    backgroundColor: 'rgba(176, 196, 222, 0.7)', // LightSteelBlue
                    borderColor: '#B0C4DE',
                    borderWidth: 1
                }
            ]
        },
        options: {
            responsive: true,
            plugins: {
                legend: {
                    position: 'top',
                },
                title: {
                    display: false
                },
                // Configuración del plugin de etiquetas
                datalabels: {
                    anchor: 'end',
                    align: 'top',
                    formatter: Math.round,
                    font: {
                        weight: 'bold'
                    }
                }
            },
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
    
    <?php endif; ?>
    </script>

    <!-- SCRIPT PARA SECCIÓN DESPLEGABLE -->
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const toggleButton = document.getElementById('toggle-contadores');
            const gridWrapper = document.getElementById('contadores-grid-wrapper');

            toggleButton.addEventListener('click', function() {
                this.classList.toggle('collapsed');
                if (gridWrapper.style.display === 'none') {
                    gridWrapper.style.display = 'block';
                } else {
                    gridWrapper.style.display = 'none';
                }
            });
        });
    </script>

</body>
</html>