DELIMITER //

CREATE OR REPLACE FUNCTION orm_retrive_json_v2(
  paras TEXT
) 
RETURNS TEXT
DETERMINISTIC
/*
  Function   : orm_api_v2 [傳入 json 的資料預處理] 的核心程式, 被 orm_api_v2 呼叫使用
  Description: 刪除 @para 多餘的內容(amis)
               如果有特殊元件(如 transfer) 會多 POST 非 orm 所需的資料, 一樣要拿掉
               picker 如果有設 joinValues:false, 也會多傳一些多餘的資料
  Build Date : 2024-06-20
  Modify History:
  1    Michael    2023/12/16 原始版本
  2    Michael    2024-06-20 改寫為MariaDB版本並優化
*/
BEGIN
  DECLARE result TEXT;
  DECLARE maxcount INT;
  DECLARE currid INT;
  DECLARE trans_data TEXT;
  DECLARE json_valid BOOLEAN;
  
  -- 檢查是否為有效JSON，如果是則直接處理，否則按原邏輯處理
  SET json_valid = JSON_VALID(paras);
  
  -- 進行一些操作，根據需求修改下面的程式碼
  SET result = paras;
  
  -- 處理 config 部分
  SET maxcount = INSTR(result, '"config":[');
  IF maxcount > 0 THEN
    -- 在 config 後可能還有資料
    SET trans_data = SUBSTRING(result FROM maxcount);
    SET currid = INSTR(trans_data, '],');
    SET trans_data = SUBSTRING(trans_data FROM currid + 2);
    
    SET result = CONCAT(SUBSTRING(result FROM 1 FOR maxcount - 1), ' ', trans_data);
  END IF;
  
  -- 處理 token 部分（除非是電子書情況）
  SET maxcount = INSTR(result, '"token"');
  IF maxcount > 0 THEN
    SET result = CONCAT(SUBSTRING(result FROM 1 FOR maxcount - 2), '}');
  END IF;
  
  -- 處理換行符
  IF INSTR(result, '\\n') > 0 THEN
    SET result = REPLACE(REPLACE(result, '\\r\\n', CHAR(10)), '\\n', CHAR(10));
  END IF;
  
  -- 如果是有效JSON，最後再驗證一次
  IF json_valid THEN
    IF NOT JSON_VALID(result) THEN
      -- 如果處理後變無效，返回原始值
      RETURN paras;
    END IF;
  END IF;
  
  RETURN result;
END //

DELIMITER ;