DELIMITER //

CREATE OR REPLACE PROCEDURE zen_create_json_comps_block(
  IN p_uuid VARCHAR(100),
  IN p_FunctionTag VARCHAR(100),
  IN p_code_id VARCHAR(100),
  IN p_group VARCHAR(10),
  IN p_FieldBlock SMALLINT,
  IN p_block VARCHAR(2),
  IN p_rowid INT
)
/*
  function   : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義)
  description: 本段 sp 主要是設定 input-text 中 view 部分的 json 定義(實在是太長了)
               後來發現, 除了特殊的元件要獨立的 sp 特別處理外, 一般元件可以都統一在 input-text 的 sp 加上一些判斷即可
  Build Date : 2023/12/20
  Modified   : 2025/08/09 (轉換為 MariaDB 版本)
  
  Modify History
    Item Who        Date       Modify Docs
    ==== ========== ========== ================================================
    1    Michael    2023/12/20 根據 v1.0 重構
    2    Assistant  2025/08/09 轉換為 MariaDB 版本
*/
BEGIN
  DECLARE v_gh TEXT;
  DECLARE v_gf TEXT;
  DECLARE v_bh TEXT;
  DECLARE v_bf TEXT;
  DECLARE v_blockname NVARCHAR(100);
  DECLARE v_bTab SMALLINT;
  DECLARE v_Tab1 VARCHAR(2);
  DECLARE v_crlf VARCHAR(2);
  DECLARE v_imax_block INT;
  DECLARE v_code_para VARCHAR(100);
  
  SET v_crlf = CONCAT(CHAR(13), CHAR(10));
  
  -- 取得最大 FieldBlock 值
  SELECT MAX(FieldBlock) INTO v_imax_block FROM zen_wizard_jsondata WHERE uuid = p_uuid;
  
  -- get code_para
  SET v_code_para = '';
  IF p_code_id IN ('SingleEntry','SingleTabs','SinglePanels') THEN
    SELECT code_para INTO v_code_para FROM zen_Wizard_template WHERE code_id = 'SingleEntry';
  -- Master-detail(支援 Tab 和 Panel 2種 UX -- 配合 Single Extend)
  ELSEIF p_code_id IN ('MasterDetailTabs','MasterDetailPanels') THEN
    SELECT code_para INTO v_code_para FROM zen_Wizard_template WHERE code_id = 'MasterDetail';
  END IF;
  
  SET v_bh = '';
  SET v_bf = '';
  
  -- 取得 block_name
  SELECT blockcname INTO v_blockname FROM zen_blockname WHERE menuid = p_FunctionTag AND blockno = p_FieldBlock;
  IF IFNULL(v_blockname, '') = '' THEN
    SET v_blockname = '區塊標題';
  END IF;
  
  -- MD Log 允許根據 code_para 決定是 Tabs or Panel(待測試)
  IF LOCATE('Tab', p_code_id) > 0 OR LOCATE('Tab', IFNULL(v_code_para, '')) > 0 THEN
    SET v_bTab = 1;
    SET v_Tab1 = '//';
  ELSE
    SET v_bTab = 0;
    SET v_Tab1 = '';
  END IF;
  
  IF p_block = 'BH' OR p_block = 'BA' THEN      
    IF (p_FieldBlock = 0 AND v_bTab = 1) OR (v_bTab = 0) THEN
      SET v_Tab1 = '';
    ELSE
      SET v_Tab1 = '//';
    END IF;
    
    SET v_bh = CONCAT(
      '			{', v_crlf,
      '              "', v_Tab1, 'type": "fieldSet",', v_crlf,
      '              "title": "', v_blockname, '",', v_crlf,
      '			   "collapsable": true,', v_crlf,
      '              "body": [', v_crlf
    );
    
    IF p_FieldBlock = 1 AND v_bTab = 1 THEN
      SET v_bh = CONCAT(
        '						{', v_crlf,
        ' 						   "type": "tabs",', v_crlf,
        '                          "mode": "line",', v_crlf,
        '                          "tabs": [', v_crlf,
        '						   {', v_crlf,
        '              			  	  "title": "', v_blockname, '",', v_crlf,
        '              			   	  "body": [', v_crlf
      );
    END IF;
  END IF;
  
  IF p_block = 'BF' OR p_block = 'BA' THEN
    SET v_bf = CONCAT(
      '			  ]', v_crlf,
      '           }', v_crlf
    );
    
    IF p_FieldBlock = v_imax_block AND v_bTab = 1 THEN
      SET v_bf = CONCAT(
        '				]', v_crlf,
        '			}', v_crlf,
        '		]', v_crlf,
        '	}', v_crlf
      );
    END IF;
  END IF;
  
  -- 加入簡易排版功能, type=group
  SET v_gh = '';
  SET v_gf = '';
  IF p_group = 'GH' THEN
    SET v_gh = CONCAT(
      '{', v_crlf,
      '              "type": "group",', v_crlf,
      '              "body": [', v_crlf
    );
  END IF;
  
  IF p_group = 'GF' THEN
    SET v_gf = CONCAT(
      '			  ]', v_crlf,
      '            }'
    );
  END IF;
  
  -- 取得並暫存 block / group 的內容
  UPDATE zen_wizard_jsondata 
  SET json_bh = v_bh, 
      json_bf = v_bf, 
      json_gh = v_gh, 
      json_gf = v_gf 
  WHERE uuid = p_uuid AND rowid = p_rowid;
END //

DELIMITER ;