-- Seleccionar base de datos
USE especializadas_seguridad;
GO


DROP FUNCTION IF EXISTS dbo.obj_empresas;
GO
CREATE FUNCTION dbo.obj_empresas(@id INT)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @json NVARCHAR(MAX);

    SELECT @json = (
        SELECT id_empresa, nombre_empresa, direccion_empresa, telefono
        FROM dbo.empresas
        WHERE id_empresa = @id
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
    );

    RETURN @json;
END;
GO


DROP FUNCTION IF EXISTS dbo.obj_usuarios;
GO
CREATE FUNCTION dbo.obj_usuarios(@id INT)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @json NVARCHAR(MAX);

    SELECT @json = (
        SELECT id_usuario,
               usuario
        FROM dbo.usuarios
        WHERE id_usuario = @id
        FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
    );

    RETURN @json;
END;
GO










-- DROP PROCEDURE IF EXISTS dbo.get_sistemas;
-- GO
-- CREATE PROCEDURE dbo.get_sistemas
--     @varPK INT,
--     @opc INT
-- AS
-- BEGIN
--     SELECT *
--     FROM dbo.sistemas
--     WHERE (@varPK = 0 OR id_sistema = @varPK)
--       AND (@opc = 0 OR estado <> 3);
-- END;
-- GO





-- DROP PROCEDURE IF EXISTS dbo.get_sistemas_permisos;
-- GO
-- CREATE PROCEDURE dbo.get_sistemas_permisos
--     @varPK INT,
--     @opc INT
-- AS
-- BEGIN
--     SELECT *
--     FROM dbo.sistemas_permisos
--     WHERE (@varPK = 0 OR id_permiso = @varPK)
--       AND (@opc = 0 OR estado <> 3);
-- END;
-- GO





DROP PROCEDURE IF EXISTS dbo.get_modulos;
GO
CREATE PROCEDURE dbo.get_modulos
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT *
    FROM dbo.modulos
    WHERE (@varPK = 0 OR id_modulo = @varPK)
      AND (@opc = 0 OR estado <> 3);
END;
GO





DROP PROCEDURE IF EXISTS dbo.get_modulos_permisos;
GO
CREATE PROCEDURE dbo.get_modulos_permisos
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT *
    FROM dbo.modulos_permisos
    WHERE (@varPK = 0 OR id_permiso = @varPK)
      AND (@opc = 0 OR estado <> 3);
END;
GO





DROP PROCEDURE IF EXISTS dbo.get_usuarios_permisos_asignaciones;
GO
CREATE PROCEDURE dbo.get_usuarios_permisos_asignaciones
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT *
    FROM dbo.usuarios_permisos_asignaciones
    WHERE (@varPK = 0 OR id_asignacion = @varPK)
      AND (@opc = 0 OR estado <> 3);
END;
GO





DROP PROCEDURE IF EXISTS dbo.get_usuarios_menus_asignaciones;
GO
CREATE PROCEDURE dbo.get_usuarios_menus_asignaciones
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT *
    FROM dbo.usuarios_menus_asignaciones
    WHERE (@varPK = 0 OR id_asignacion = @varPK)
      AND (@opc = 0 OR estado <> 3);
END;
GO





DROP PROCEDURE IF EXISTS dbo.get_roles_permisos_asignaciones;
GO
CREATE PROCEDURE dbo.get_roles_permisos_asignaciones
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT *
    FROM dbo.roles_permisos_asignaciones
    WHERE (@varPK = 0 OR id_asignacion = @varPK)
      AND (@opc = 0 OR estado <> 3);
END;
GO





DROP PROCEDURE IF EXISTS dbo.get_usuarios;
GO
CREATE PROCEDURE dbo.get_usuarios
    @varPK INT,
    @opc INT
AS
BEGIN
    SELECT id_usuario, usuario
    FROM dbo.usuarios
    WHERE (@varPK = 0 OR id_usuario = @varPK)
      AND (@opc = 0 OR estado <> 3);
END;
GO





-- PROTOTIPO
-- DROP PROCEDURE IF EXISTS dbo.get_usuarios;
-- GO
-- CREATE PROCEDURE dbo.get_usuarios
--     @varPK INT,
--     @opc INT,
--     @usuario VARCHAR(50)
-- AS
-- BEGIN
--     SELECT id_usuario, usuario
--     FROM dbo.usuarios
--     WHERE (@varPK = 0 OR id_usuario = @varPK)
--       AND (@opc = 0 OR estado <> 3)
--       y (usuario tiene permiso get_usuarios ? todos :
--         usuario tiene permiso get_usuarios__empresa ? registro.id_empresa = @usuario.id_empresa :
--         usuario tiene permiso get_usuarios__propio ? registro.id_usuario = @usuario.id_usuario : no seleccionar nada) 
--       ;
-- END;
-- GO

