<?php
session_start();
require_once "../Utilidades/Conexion_BD.php";
require_once "../Utilidades/Auditoria.php"; 

$nombre_usuario = trim($_POST['nameuser'] ?? '');
$contrasena = trim($_POST['password'] ?? '');

$conn = new Conexion_BD();

// Usar consulta preparada para evitar SQL Injection
$sql = "SELECT 
        u.id_usuario,
        u.usuario,
        u.nombre,
        u.contrasena,
        u.id_cargo,
        u.estado,
        c.descripcion 
    FROM usuarios u
    INNER JOIN cargo c ON u.id_cargo = c.id
    WHERE u.usuario = ?
";

$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $nombre_usuario);
$stmt->execute();
$resultado = $stmt->get_result();

if ($resultado->num_rows > 0) {
    $fila = $resultado->fetch_assoc();
    $id_usuario = $fila['id_usuario'];
    $usuario_login = $fila['usuario'];
    $nombre = $fila['nombre'];
    $hash_almacenado = $fila['contrasena'];
    $id_cargo_usuario = $fila['id_cargo'];
    $cargo_usuario = $fila['descripcion'];
    $estado_usuario = strtolower(trim($fila['estado'] ?? ''));

    // Mapeo de estados para mostrar nombres amigables
    $estado_labels = [
        'activo'     => 'Activ@',
        'inactivo'   => 'Inactiv@',
        'suspendido' => 'Suspendid@',
        'bloqueado'  => 'Bloquead@'
    ];

    if ($estado_usuario !== 'activo') {
        // ======= AUDITORÍA =======
        registrarAuditoria(
            'usuarios', 
            'login_bloqueado',
            "Intento de acceso con usuario bloqueado/inactivo/suspendido: $usuario_login (estado: $estado_usuario)",
            $id_usuario,
            $usuario_login,
            'usuarios',
            $id_usuario,
            strtolower($cargo_usuario)
        );
        // =========================
        $estado_legible = $estado_labels[$estado_usuario] ?? ucfirst($estado_usuario);
        $mensaje = "Tu cuenta está {$estado_legible}. Contacta al administrador.";
        header("Location: ../../index.php?e=" . urlencode($mensaje));
        exit();
    }

    if (password_verify($contrasena, $hash_almacenado)) {
        $_SESSION['usuario'] = $usuario_login;
        $_SESSION['id_usuario'] = $id_usuario;
        $_SESSION['id_cargo'] = $cargo_usuario;
        $_SESSION['nombre'] = $nombre;
        $_SESSION['rol'] = strtolower($cargo_usuario);

        // Cargar permisos si es supervisor
        if (strtolower($cargo_usuario) === 'supervisor') {
            $sqlPermisos = "SELECT modulo, puede_agregar, puede_editar, puede_eliminar, puede_reportes
                FROM permisos_usuario
                WHERE id_usuario = ?
            ";

            $stmtPerm = $conn->prepare($sqlPermisos);
            $stmtPerm->bind_param("i", $id_usuario);
            $stmtPerm->execute();
            $resultadoPermisos = $stmtPerm->get_result();

            $permisos = [];

            while ($rowPerm = $resultadoPermisos->fetch_assoc()) {
                $modulo = $rowPerm["modulo"];
                $permisos[$modulo] = [
                    "puede_agregar"    => (int)$rowPerm["puede_agregar"],
                    "puede_editar"     => (int)$rowPerm["puede_editar"],
                    "puede_eliminar"   => (int)$rowPerm["puede_eliminar"],
                    "puede_reportes"   => (int)$rowPerm["puede_reportes"],
                ];
            }
            $_SESSION["permisos"] = $permisos;
        }

        // ======= AUDITORÍA =======
        registrarAuditoria(
            'usuarios', 
            'login', 
            "Inicio de sesión exitoso para usuario: $usuario_login", 
            $id_usuario, 
            $usuario_login,
            'usuarios',
            $id_usuario,
            strtolower($cargo_usuario)
        );
        // =========================

        header("Location: ../../Vista/General/Adm_Menu_Navegacion.php");
        exit();

    } else {
        // ======= AUDITORÍA =======
        registrarAuditoria(
            'usuarios',
            'login_fallido',
            "Intento fallido de inicio de sesión para usuario: $nombre_usuario",
            0,
            $nombre_usuario,
            'usuarios',
            null,
            'desconocido'
        );
        // =========================
        header("Location: ../../index.php?e=" . urlencode("Usuario o contraseña incorrectos."));
        exit();
    }

} else {
    // ======= AUDITORÍA =======
    registrarAuditoria(
        'usuarios',
        'login_fallido',
        "Intento fallido de inicio de sesión para usuario: $nombre_usuario",
        0,
        $nombre_usuario,
        'usuarios',
        null,
        'desconocido'
    );
    // =========================
    header("Location: ../../index.php?e=" . urlencode("Usuario o contraseña incorrectos."));
    exit();
}

$conn->closeConnection();


?>
