-- =====================================================
-- STORED PROCEDURE: LOGIN DE USUARIO
-- =====================================================

USE barcoded_restaurant;

DELIMITER $$

DROP PROCEDURE IF EXISTS sp_login_usuario$$

CREATE PROCEDURE sp_login_usuario(
    IN p_nombre_usuario VARCHAR(50),
    IN p_contrasena VARCHAR(255)
)
BEGIN
    DECLARE v_usuario_existe INT DEFAULT 0;
    DECLARE v_usuario_activo INT DEFAULT 0;
    
    -- Verificar si el usuario existe
    SELECT COUNT(*) INTO v_usuario_existe
    FROM usuarios
    WHERE nombre_usuario = p_nombre_usuario;
    
    -- Si el usuario no existe
    IF v_usuario_existe = 0 THEN
        SELECT 
            'ERROR' as status,
            'Usuario no encontrado' as message,
            NULL as data;
    ELSE
        -- Verificar si el usuario está activo
        SELECT activo INTO v_usuario_activo
        FROM usuarios
        WHERE nombre_usuario = p_nombre_usuario;
        
        -- Si el usuario está inactivo
        IF v_usuario_activo = 0 THEN
            SELECT 
                'ERROR' as status,
                'Usuario inactivo. Contacte al administrador' as message,
                NULL as data;
        ELSE
            -- Retornar datos del usuario para validar contraseña en el backend
            SELECT 
                'SUCCESS' as status,
                'Usuario encontrado' as message,
                JSON_OBJECT(
                    'id_usuario', u.id_usuario,
                    'nombre_usuario', u.nombre_usuario,
                    'contrasena', u.contrasena,
                    'nombres', u.nombres,
                    'apellidos', u.apellidos,
                    'email', u.email,
                    'dni', u.dni,
                    'telefono', u.telefono,
                    'activo', u.activo,
                    'id_tipo_usuario', u.id_tipo_usuario,
                    'tipo_usuario', tu.nombre,
                    'permisos', tu.permisos
                ) as data
            FROM usuarios u
            INNER JOIN tipo_usuario tu ON u.id_tipo_usuario = tu.id_tipo_usuario
            WHERE u.nombre_usuario = p_nombre_usuario;
            
            -- Actualizar último acceso
            UPDATE usuarios
            SET ultimo_acceso = NOW()
            WHERE nombre_usuario = p_nombre_usuario;
        END IF;
    END IF;
END$$

DELIMITER ;

-- =====================================================
-- STORED PROCEDURE: OBTENER USUARIO POR ID
-- =====================================================

DELIMITER $$

DROP PROCEDURE IF EXISTS sp_obtener_usuario_por_id$$

CREATE PROCEDURE sp_obtener_usuario_por_id(
    IN p_id_usuario INT
)
BEGIN
    SELECT 
        u.id_usuario,
        u.nombre_usuario,
        u.nombres,
        u.apellidos,
        u.email,
        u.dni,
        u.telefono,
        u.foto,
        u.activo,
        u.fecha_registro,
        u.ultimo_acceso,
        u.id_tipo_usuario,
        tu.nombre as tipo_usuario,
        tu.permisos
    FROM usuarios u
    INNER JOIN tipo_usuario tu ON u.id_tipo_usuario = tu.id_tipo_usuario
    WHERE u.id_usuario = p_id_usuario;
END$$

DELIMITER ;

-- =====================================================
-- PRUEBA DEL STORED PROCEDURE
-- =====================================================

-- Llamar al SP (reemplaza 'admin' con tu usuario)
-- CALL sp_login_usuario('admin', 'contraseña_hasheada');

-- Ver usuarios disponibles
-- SELECT nombre_usuario, activo FROM usuarios;
