-- >>> inicia sesion
DELIMITER $$
DROP PROCEDURE IF EXISTS sesionUsuario;
CREATE PROCEDURE sesionUsuario
(usuario$ VARCHAR(20), passwd$ VARCHAR(10))
BEGIN
	DECLARE id_$ INT;
	DECLARE estado_$ INT;
	IF EXISTS (SELECT id FROM usuarios WHERE descifrar(usuario) = usuario$) THEN
		SET id_$ := (SELECT id FROM usuarios WHERE descifrar(usuario) = usuario$);
		SET estado_$ := (SELECT estado FROM usuarios WHERE id = id_$);
		IF estado_$ = 11 THEN
			IF (SELECT descifrar(passwd) FROM usuarios WHERE id = id_$) = passwd$ THEN
				SELECT 800 AS estado, clave AS clave FROM usuarios WHERE id = id_$;
			ELSE
				SELECT 500 AS estado, 'Ingresa las credenciales correctas' AS mssg;
			END IF;
		ELSE
			SELECT 500 AS estado, 'El usuario tiene restringido el acceso' AS mssg;
		END IF;
	ELSE
		SELECT 500 AS estado, 'Ingresa las credenciales correctas' AS mssg;
	END IF;
END
$$

-- >>> actualiza los datos de los usuarios
DELIMITER $$
DROP PROCEDURE IF EXISTS uUsuario;
CREATE PROCEDURE uUsuario
(clave$ VARCHAR(10), nombre$ VARCHAR(150), puesto$ VARCHAR(100), telefono$ VARCHAR(20), correo$ VARCHAR(100), usuario$ VARCHAR(20), passwd$ VARCHAR(10))
BEGIN
	DECLARE id_$ INT;
	SET id_$ := (SELECT id FROM usuarios WHERE clave = clave$);
	IF NOT EXISTS (SELECT id FROM usuarios WHERE descifrar(nombre) = UPPER(nombre$) AND NOT id = id_$ OR LOWER(descifrar(usuario)) = LOWER(usuario$) AND NOT id = id_$) THEN
		UPDATE usuarios SET nombre = cifrar(UPPER(nombre$)), puesto = cifrar(UPPER(puesto$)), telefono = cifrar(telefono$), correo = cifrar(correo$), usuario = cifrar(usuario$), passwd = cifrar(passwd$)
		WHERE id = id_$;
		IF (ROW_COUNT()) = 1 THEN
			SELECT 800 AS estado, 'Se actualizo el usuario' AS mssg;
		ELSE
			SELECT 500 AS estado, 'Intenta de nuevo' AS mssg;
		END IF;
	ELSE
		SELECT 500 AS estado, 'Ya existe el usuario' AS mssg;
	END IF;	
END
$$

-- >>> consulta los datos de los usuarios
DELIMITER $$
DROP PROCEDURE IF EXISTS cUsuario;
CREATE PROCEDURE cUsuario
(clave$ VARCHAR(10))
BEGIN
	DECLARE id_$ INT;
	SET id_$ := (SELECT id FROM usuarios WHERE clave = clave$);
	SELECT descifrar(nombre) AS nombre, descifrar(puesto) AS puesto, descifrar(telefono) AS telefono, descifrar(correo) AS correo, descifrar(usuario) AS usuario, descifrar(passwd) AS passwd
	FROM usuarios WHERE id = id_$;
END
$$

-- >>> registra el usuario de sistema
DELIMITER $$
DROP PROCEDURE IF EXISTS iUsuario;
CREATE PROCEDURE iUsuario
(nombre$ VARCHAR(150), puesto$ VARCHAR(100), telefono$ VARCHAR(20), correo$ VARCHAR(100), usuario$ VARCHAR(20), passwd$ VARCHAR(10))
BEGIN
	-- valida que no exists el usuario
	IF NOT EXISTS (SELECT id FROM usuarios WHERE descifrar(nombre) = UPPER(nombre$) OR LOWER(descifrar(usuario)) = LOWER(usuario$)) THEN
		INSERT INTO usuarios(clave, nombre, puesto, telefono, correo, usuario, passwd)
		VALUES(clave(), cifrar(UPPER(nombre$)), cifrar(UPPER(puesto$)), cifrar(telefono$), cifrar(correo$), cifrar(usuario$), cifrar(passwd$));
		IF (ROW_COUNT()) = 1 THEN
			SELECT 800 AS estado, 'Se registró el usuario' AS mssg;
		ELSE
			SELECT 500 AS estado, 'Intenta de nuevo' AS mssg;
		END IF;
	ELSE
		SELECT 500 AS estado, 'Ya existe el usuario' AS mssg;
	END IF;	
END
$$
