<?php
session_start();
include_once 'config/database.php';

// Configurar zona horaria de Lima, Perú
date_default_timezone_set('America/Lima');

$database = new Database();
$conn = $database->getConnection();

echo "<h2>DEBUG MIDDLEWARE - Verificación de Horario</h2>";

if (!isset($_SESSION['user']['codempleado'])) {
    echo "<p style='color: red;'>Usuario no logueado</p>";
    exit();
}

$empleadoId = $_SESSION['user']['codempleado'];
echo "<p><strong>ID Empleado:</strong> " . $empleadoId . "</p>";

// Información de zona horaria
echo "<h3>Información de Zona Horaria</h3>";
echo "<p><strong>Zona horaria:</strong> " . date_default_timezone_get() . "</p>";
echo "<p><strong>Fecha completa:</strong> " . date('Y-m-d H:i:s') . "</p>";
echo "<p><strong>Día de la semana:</strong> " . date('N') . " (1=Lunes, 7=Domingo)</p>";
echo "<p><strong>Hora actual:</strong> " . date('H:i:s') . "</p>";

try {
    // Obtener información del empleado
    $stmt = $conn->prepare("
        SELECT e.*, th.tipohorario 
        FROM templeado e 
        LEFT JOIN tipohorario th ON e.codtipohorario = th.codtipohorario 
        WHERE e.codempleado = ?
    ");
    $stmt->execute([$empleadoId]);
    $empleadoInfo = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($empleadoInfo) {
        echo "<h3>Información del Empleado</h3>";
        echo "<p><strong>Nombre:</strong> " . $empleadoInfo['nombres'] . " " . $empleadoInfo['apellidoPaterno'] . "</p>";
        echo "<p><strong>Tipo de horario:</strong> " . $empleadoInfo['tipohorario'] . "</p>";
        echo "<p><strong>Código tipo horario:</strong> " . $empleadoInfo['codtipohorario'] . "</p>";
        
        $diaActual = date('N');
        $horaActual = date('H:i:s');
        
        echo "<h3>Consulta de Horarios (Misma lógica del middleware)</h3>";
        echo "<p><strong>Día actual:</strong> " . $diaActual . "</p>";
        
        // Verificar si el empleado tiene horario para hoy
        $stmt = $conn->prepare("
            SELECT h.*, d.diasemana, d.coddiasemana
            FROM thorario h
            LEFT JOIN tdiasemana d ON h.coddiasemana = d.coddiasemana
            WHERE h.codtipohorario = ? AND d.coddiasemana = ?
        ");
        $stmt->execute([$empleadoInfo['codtipohorario'], $diaActual]);
        $horarioActual = $stmt->fetch(PDO::FETCH_ASSOC);
        
        echo "<p><strong>Horario encontrado:</strong> " . ($horarioActual ? "SÍ" : "NO") . "</p>";
        
        if ($horarioActual) {
            echo "<h3>Detalles del Horario Encontrado</h3>";
            echo "<pre>" . print_r($horarioActual, true) . "</pre>";
            
            $horaInicio = $horarioActual['horainicio'];
            $horaFin = $horarioActual['horafinal'];
            
            echo "<h3>Comparación de Horas (Misma lógica del middleware)</h3>";
            echo "<p><strong>Hora actual:</strong> " . $horaActual . "</p>";
            echo "<p><strong>Hora inicio:</strong> " . $horaInicio . "</p>";
            echo "<p><strong>Hora fin:</strong> " . $horaFin . "</p>";
            
            // Comparación con strings (lógica original del middleware)
            echo "<h4>Comparación con Strings (Lógica Original)</h4>";
            echo "<p>Hora actual >= Hora inicio: " . ($horaActual >= $horaInicio ? "SÍ" : "NO") . "</p>";
            echo "<p>Hora actual <= Hora fin: " . ($horaActual <= $horaFin ? "SÍ" : "NO") . "</p>";
            echo "<p>Dentro del horario (string): " . (($horaActual >= $horaInicio && $horaActual <= $horaFin) ? "SÍ" : "NO") . "</p>";
            
            // Comparación con timestamps (lógica mejorada)
            $timestampActual = strtotime($horaActual);
            $timestampInicio = strtotime($horaInicio);
            $timestampFin = strtotime($horaFin);
            
            echo "<h4>Comparación con Timestamps (Lógica Mejorada)</h4>";
            echo "<p><strong>Timestamp actual:</strong> " . $timestampActual . " (" . date('H:i:s', $timestampActual) . ")</p>";
            echo "<p><strong>Timestamp inicio:</strong> " . $timestampInicio . " (" . date('H:i:s', $timestampInicio) . ")</p>";
            echo "<p><strong>Timestamp fin:</strong> " . $timestampFin . " (" . date('H:i:s', $timestampFin) . ")</p>";
            echo "<p>Timestamp actual >= Timestamp inicio: " . ($timestampActual >= $timestampInicio ? "SÍ" : "NO") . "</p>";
            echo "<p>Timestamp actual <= Timestamp fin: " . ($timestampActual <= $timestampFin ? "SÍ" : "NO") . "</p>";
            echo "<p>Dentro del horario (timestamp): " . (($timestampActual >= $timestampInicio && $timestampActual <= $timestampFin) ? "SÍ" : "NO") . "</p>";
            
            // Simular la lógica del middleware
            $accesoPermitido = false;
            if ($timestampActual >= $timestampInicio && $timestampActual <= $timestampFin) {
                $accesoPermitido = true;
            }
            
            echo "<h3>Resultado del Middleware</h3>";
            echo "<p><strong>Acceso permitido:</strong> " . ($accesoPermitido ? "SÍ" : "NO") . "</p>";
            
            if (!$accesoPermitido) {
                echo "<p style='color: red;'><strong>El middleware redirigiría a 'fuera_horario.php'</strong></p>";
                echo "<p><strong>Datos que se guardarían en la sesión:</strong></p>";
                echo "<pre>" . print_r([
                    'empleado' => $empleadoInfo,
                    'horario' => $horarioActual,
                    'estado' => 'fuera_horario',
                    'mensaje' => 'No tiene acceso al sistema fuera de su horario laboral'
                ], true) . "</pre>";
            } else {
                echo "<p style='color: green;'><strong>El middleware permitiría el acceso</strong></p>";
            }
            
        } else {
            echo "<h3>No se encontró horario para hoy</h3>";
            echo "<p style='color: red;'><strong>El middleware redirigiría a 'fuera_horario.php'</strong></p>";
        }
        
    } else {
        echo "<p style='color: red;'>Empleado no encontrado</p>";
    }
    
} catch(PDOException $e) {
    echo "<p style='color: red;'>Error: " . $e->getMessage() . "</p>";
}
?>
