<?php
// ✅ CONFIGURAR SESIÓN ANTES DE session_start()
// Extender tiempo de vida de la sesión a 4 horas (14400 segundos)
ini_set('session.gc_maxlifetime', 10800);
ini_set('session.cookie_lifetime', 10800);

// Configurar parámetros de cookie de sesión
session_set_cookie_params([
    'lifetime' => 10800,  // 4 horas
    'path' => '/',
    'domain' => '',
    'secure' => false,    // Cambiar a true si usas HTTPS
    'httponly' => true,
    'samesite' => 'Lax'
]);

session_start();

// ✅ Actualizar tiempo de última actividad
$_SESSION['LAST_ACTIVITY'] = time();

$host = "localhost";
$user = "ascensof_Admin1";
$password = "3DS0NCH4115H4CK3R+";
$db = "ascensof_BDsimulador";

$conn = new mysqli($host, $user, $password, $db);
if ($conn->connect_error) {
    die("Conexión fallida: " . $conn->connect_error);
}

// Obtener datos del formulario
$usuario = $conn->real_escape_string($_POST['username']);
$contrasena = $_POST['password'];

// Buscar usuario solo por usuario
$sql = "SELECT * FROM Usuarios WHERE usuario = '$usuario'";
$result = $conn->query($sql);

if ($result->num_rows === 1) {
    $row = $result->fetch_assoc();

    // Verificar la contraseña con password_verify
    if (password_verify($contrasena, $row['contrasenna'])) {
        
        // 🔒 Validar si el usuario está habilitado (1)
        if ($row['habilitado'] != 1) {
            mostrarUsuarioNoHabilitado();
        }
        
        // Generar un nuevo token
        $nuevoToken = bin2hex(random_bytes(32));

        // Guardar datos de sesión
        $_SESSION['usuario'] = $row['usuario'];
        $_SESSION['nombre'] = $row['nom_usuario'];
        $_SESSION['tipo_acceso'] = $row['acceso_id'];
        $_SESSION['token'] = $nuevoToken;
        $_SESSION['usuario_id'] = $row['Id'];
        $_SESSION['LAST_ACTIVITY'] = time(); // ✅ Timestamp de última actividad

        // Actualizar token en base de datos
        $stmt = $conn->prepare("UPDATE Usuarios SET token = ? WHERE usuario = ?");
        $stmt->bind_param("ss", $nuevoToken, $usuario);
        $stmt->execute();

        if (!empty($row['token'])) {
            mostrarSweetAlert(
                'Sesión Duplicada',
                'SIAPOL cerrará las sesiones duplicadas y abrirá sesión aquí.',
                ($_SESSION['tipo_acceso'] === 'ADMIN' ? 'panel_admin.php' : 'menu.php'),
                'info'
            );
            exit;
        } else {
            if ($row['acceso_id'] === 'ADMIN') {
                header("Location: panel_admin.php");
            } else {
                header("Location: menu.php");
            }
            exit;
        }
    } else {
        // Contraseña incorrecta
        mostrarErrorAcceso();
    }
} else {
    // Usuario no encontrado
    mostrarErrorAcceso();
}

$conn->close();

function mostrarErrorAcceso() {
    mostrarSweetAlert(
        'Acceso denegado',
        'Usuario o contraseña incorrectos.',
        'index.html',
        'error'
    );
}

function mostrarUsuarioNoHabilitado() {
    $año = date("Y");
    mostrarSweetAlert(
        'Acceso Denegado',
        "El usuario no está habilitado para el PROCESO $año.",
        'index.html',
        'error'
    );
}

function mostrarSweetAlert($titulo, $mensaje, $redireccion, $tipo = 'error') {
    // Mapeo de tipos personalizados a tipos de SweetAlert2
    $iconMap = [
        'error' => 'error',
        'success' => 'success',
        'info' => 'info',
        'warning' => 'warning'
    ];
    
    $icon = isset($iconMap[$tipo]) ? $iconMap[$tipo] : 'error';
    
    echo "
    <!DOCTYPE html>
    <html lang='es'>
    <head>
        <meta charset='UTF-8'>
        <meta name='viewport' content='width=device-width, initial-scale=1.0'>
        <title>" . htmlspecialchars($titulo) . "</title>
        <!-- SweetAlert2 CSS -->
        <link href='https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css' rel='stylesheet'>
        <!-- SweetAlert2 JS -->
        <script src='https://cdn.jsdelivr.net/npm/sweetalert2@11'></script>
    </head>
    <body>

        <style>
            /* Fuente similar a la imagen de referencia */
            .swal2-popup {
                font-family: 'Roboto', 'Segoe UI', Tahoma, Geneva, Verdana, system-ui, sans-serif;
            }
        </style>

        <script>
            document.addEventListener('DOMContentLoaded', () => {
                Swal.fire({
                    title: '" . addslashes($titulo) . "',
                    text: '" . addslashes($mensaje) . "',
                    icon: '$icon',
                    confirmButtonText: 'Aceptar',
                    confirmButtonColor: '#3085d6',
                    allowOutsideClick: false,
                    allowEscapeKey: false,
                    width: '400px'
                }).then((result) => {
                    if (result.isConfirmed) {
                        window.location.href = '" . addslashes($redireccion) . "';
                    }
                });
            });
        </script>
    </body>
    </html>";
    exit;
}
?>