ALTER TABLE nota_bodega 
ADD COLUMN pedido_por_indexed VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL;

DROP FUNCTION IF EXISTS extract_pedido_por_ids;
DELIMITER $$

CREATE FUNCTION extract_pedido_por_ids(json_data JSON)
RETURNS VARCHAR(512) DETERMINISTIC
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE v_id VARCHAR(32);
    DECLARE result VARCHAR(512) DEFAULT NULL;

    DECLARE cur CURSOR FOR 
        SELECT jt.id
        FROM JSON_TABLE(json_data, '$[*]' COLUMNS (
            id VARCHAR(191) PATH '$.id',
			fue_error CHAR(2) PATH '$.fue_error'
        )) AS jt
        WHERE
            jt.fue_error = 'No';
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- Open cursor
    OPEN cur;

    -- Loop through values
    read_loop: LOOP
        FETCH cur INTO v_id;
        IF done THEN
            LEAVE read_loop;
        END IF;
        -- Concatenate values
        SET result = IFNULL(CONCAT(result, ', ', v_id), v_id);
    END LOOP;

    -- Close cursor
    CLOSE cur;

    RETURN result;
END$$

DELIMITER ;

DROP FUNCTION IF EXISTS extract_pedido_por_values;
DELIMITER $$

CREATE FUNCTION extract_pedido_por_values(json_data JSON)
RETURNS VARCHAR(1024) DETERMINISTIC
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE v_lbl VARCHAR(191);
    DECLARE result VARCHAR(1024) DEFAULT NULL;

    DECLARE cur CURSOR FOR 
        SELECT jt.lbl
        FROM JSON_TABLE(json_data, '$[*]' COLUMNS (
            lbl VARCHAR(191) PATH '$.lbl',
			fue_error CHAR(2) PATH '$.fue_error'
        )) AS jt
        WHERE
            jt.fue_error = 'No';
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- Open cursor
    OPEN cur;

    -- Loop through values
    read_loop: LOOP
        FETCH cur INTO v_lbl;
        IF done THEN
            LEAVE read_loop;
        END IF;
        -- Concatenate values
        SET result = IFNULL(CONCAT(result, ', ', v_lbl), v_lbl);
    END LOOP;

    -- Close cursor
    CLOSE cur;

    RETURN result;
END$$

DELIMITER ;


DROP FUNCTION IF EXISTS extract_cliente_nombre;
DELIMITER $$

CREATE FUNCTION extract_cliente_nombre(json_data JSON)
RETURNS VARCHAR(1024) DETERMINISTIC
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE v_nombre VARCHAR(191);
    DECLARE result VARCHAR(1024) DEFAULT NULL;

    DECLARE cur CURSOR FOR 
        SELECT jt.nombre
        FROM JSON_TABLE(json_data, '$[*]' COLUMNS (
            nombre VARCHAR(191) PATH '$.nombre',
			fue_error CHAR(2) PATH '$.fue_error'
        )) AS jt
        WHERE
            jt.fue_error = 'No';
		
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- Open cursor
    OPEN cur;

    -- Loop through values
    read_loop: LOOP
        FETCH cur INTO v_nombre;
        IF done THEN
            LEAVE read_loop;
        END IF;
        -- Concatenate values
        SET result = IFNULL(CONCAT(result, ', ', v_nombre), v_nombre);
    END LOOP;

    RETURN result;
END$$

DELIMITER ;

DROP FUNCTION IF EXISTS extract_cliente_ids;

DELIMITER $$
CREATE FUNCTION extract_cliente_ids(json_data JSON)
RETURNS VARCHAR(1024) DETERMINISTIC
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE v_cliente_id VARCHAR(191);
    DECLARE result VARCHAR(1024) DEFAULT NULL;

    DECLARE cur CURSOR FOR 
        SELECT jt.cliente_id
        FROM JSON_TABLE(json_data, '$[*]' COLUMNS (
            cliente_id VARCHAR(32) PATH '$.cliente_id',
			fue_error CHAR(2) PATH '$.fue_error'
        )) AS jt
        WHERE
            jt.fue_error = 'No';
		
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    -- Open cursor
    OPEN cur;

    -- Loop through values
    read_loop: LOOP
        FETCH cur INTO v_cliente_id;
        IF done THEN
            LEAVE read_loop;
        END IF;
        -- Concatenate values
        SET result = IFNULL(CONCAT(result, ', ', v_cliente_id), v_cliente_id);
    END LOOP;

    -- Close cursor
    CLOSE cur;

    RETURN result;
END$$

DELIMITER ;


DROP TRIGGER IF EXISTS before_nota_bodega_update;
DELIMITER $$

CREATE TRIGGER before_nota_bodega_update
BEFORE UPDATE ON nota_bodega
FOR EACH ROW
BEGIN
    -- Process cliente
    SET NEW.cliente_actual = extract_cliente_nombre(NEW.cliente);
    SET NEW.cliente_actual_id = extract_cliente_ids(NEW.cliente);

    -- Process pedido_por
    SET NEW.pedido_por_indexed = extract_pedido_por_values(NEW.pedido_por);
    SET NEW.pedido_por_ids_indexed = extract_pedido_por_ids(NEW.pedido_por);
END$$

DELIMITER ;


DROP TRIGGER IF EXISTS before_nota_bodega_insert;
DELIMITER $$

CREATE TRIGGER before_nota_bodega_insert
BEFORE INSERT ON nota_bodega
FOR EACH ROW
BEGIN
    -- Process cliente
    SET NEW.cliente_actual = extract_cliente_nombre(NEW.cliente);
    SET NEW.cliente_actual_id = extract_cliente_ids(NEW.cliente);

    -- Process pedido_por
    SET NEW.pedido_por_indexed = extract_pedido_por_values(NEW.pedido_por);
	SET NEW.pedido_por_ids_indexed = extract_pedido_por_ids(NEW.pedido_por);
END$$

DELIMITER ;


ALTER TABLE `nota_bodega` CHANGE `cliente_actual` `cliente_actual` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL;
ALTER TABLE `nota_bodega` CHANGE ADD `pedido_por_indexed` VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL;

ALTER TABLE nota_bodega 
ADD COLUMN pedido_por_ids_indexed VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL;

ALTER TABLE `vitex`.`nota_bodega` DROP INDEX `cliente_idx`;
ALTER TABLE `vitex`.`nota_bodega` DROP INDEX `idx_fulltext_cliente_tipo`;
ALTER TABLE `vitex`.`nota_bodega` DROP INDEX `idx_tipo_cliente`;
ALTER TABLE `vitex`.`nota_bodega` DROP INDEX `idx_tipo_pedido_por_fulltext`;
ALTER TABLE `vitex`.`nota_bodega` DROP INDEX `idx_tipo_cliente_fulltext`;


ALTER TABLE `vitex`.`nota_bodega` ADD INDEX `idx_tipo_cliente` (`tipo_txt`, `cliente_actual`, `cliente_actual_id`) USING BTREE;
ALTER TABLE `vitex`.`nota_bodega` ADD FULLTEXT `idx_ft_tipo_fulltext` (`tipo_txt`);
ALTER TABLE `vitex`.`nota_bodega` ADD FULLTEXT `idx_ft_pedido_por_indexed` (`pedido_por_indexed`);
ALTER TABLE `vitex`.`nota_bodega` ADD FULLTEXT `idx_ft_pedido_por_ids_indexed` (`pedido_por_ids_indexed`);
ALTER TABLE `vitex`.`nota_bodega` ADD FULLTEXT `idx_ft_cliente_actual` (`cliente_actual`);
ALTER TABLE `vitex`.`nota_bodega` ADD FULLTEXT `idx_ft_cliente_actual_id` (`cliente_actual_id`);

update nota_bodega set tipo=tipo;