DELIMITER //

CREATE OR REPLACE PROCEDURE zen_create_json_comps_picker(
  IN p_uuid VARCHAR(100),
  IN p_FunctionTag VARCHAR(100),
  IN p_FieldName VARCHAR(100),
  IN p_FieldCN NVARCHAR(100),
  IN p_picker_tag VARCHAR(100),
  IN p_pk VARCHAR(100),
  IN p_FieldCheckNull VARCHAR(2),
  IN p_rowid INT
)
/*
  function   : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義)
  description: 本段 sp 主要是設定 picker 的 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    Michael    2024-03-02 修改 value 修改狀態不應有 default
    3    Michael    2024-03-03 補加入 searchable 的 code
    4    Assistant  2025/08/09 轉換為 MariaDB 版本
*/
BEGIN
  DECLARE v_comps TEXT;
  DECLARE v_json_insert TEXT;
  DECLARE v_json_update TEXT;
  DECLARE v_json_quickedit TEXT;
  DECLARE v_json_gridview TEXT;
  DECLARE v_json_view TEXT;
  DECLARE v_cnt INT;
  DECLARE v_pos INT;
  
  DECLARE v_blob_data TEXT;
  DECLARE v_field_df TEXT;
  DECLARE v_required TEXT;
  DECLARE v_crlf VARCHAR(2);
  DECLARE v_ip VARCHAR(100);
  DECLARE v_db VARCHAR(100);
  DECLARE v_gridType VARCHAR(100);
  DECLARE v_picker_data TEXT;
  DECLARE v_picker_value VARCHAR(200);
  
  -- 通用寫法
  SET v_crlf = CONCAT(CHAR(13), CHAR(10));
  SET v_blob_data = '';
  SET v_field_df = '';
  SET v_required = '';
  SET v_ip = '';
  SET v_db = '';

  SET v_ip = '${ls:base_ip}';
  SET v_db = '${ls:base_db}';
  SET v_gridType = 'static';  -- text(text 在 FromView 時, label 會不顯示)

  -- Insert
  SET v_comps = zen_picker(p_picker_tag, p_FieldName, p_FieldCN, 'E', v_ip, v_db, p_FunctionTag);
  SET v_json_insert = v_comps;
      
  -- update: 加入判斷, 是否為 pk 欄位
  SET v_cnt = 0;
  
  -- 检查是否为PK字段
  SELECT COUNT(*) INTO v_cnt FROM (
    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(p_pk, ',', numbers.n), ',', -1) AS col
    FROM (
      SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL
      SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL
      SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
    ) numbers
    WHERE numbers.n <= LENGTH(p_pk) - LENGTH(REPLACE(p_pk, ',', '')) + 1
  ) AS split_pk
  WHERE col = p_FieldName;
  
  IF v_cnt > 0 THEN
    SET v_comps = REPLACE(v_comps, '"joinValues": true,', CONCAT('"disabled": true,', v_crlf, '  "joinValues": true,'));
  END IF;
  
  -- 修改狀態時,不應該有預設值 "value": "${ls:userid}",
  SET v_cnt = LOCATE('"value": "${', v_comps);
  
  IF v_cnt > 0 THEN
    SET v_picker_data = SUBSTRING(v_comps, v_cnt, 100);
    SET v_pos = LOCATE('}"', v_picker_data);
    SET v_picker_value = CONCAT(SUBSTRING(v_picker_data, 1, v_pos), '"');
  
    SET v_comps = REPLACE(v_comps, v_picker_value, '"value": ""');
  END IF;
  
  SET v_json_update = v_comps;
  
  -- quickEdit
  SET v_json_quickedit = v_comps;
  
  -- Grid view, 要加入 Query 的 searchable 內容
  IF p_FieldCheckNull = 'Q' OR p_FieldCheckNull = 'A' THEN
    SET v_field_df = CONCAT(
      '                    "searchable": {', v_crlf,
      '                      "type": "input-text",', v_crlf,
      '                      "name": "search_', p_FieldName, '",', v_crlf,
      '                      "label": "', p_FieldCN, '"', v_crlf,
      '                    },', v_crlf
    );
  END IF;
    
  SET v_comps = CONCAT(
    '                  {', v_crlf,
    '                    "type": "', v_gridType, '",', v_crlf,
    '                    "name": "', p_FieldName, '",', v_crlf,
    v_field_df, v_crlf,
    '                    "label": "', p_FieldCN, '"', v_crlf,
    '                  }'
  );
  
  SET v_json_gridview = v_comps;
  
  -- view
  SET v_picker_data = zen_picker(p_picker_tag, p_FieldName, p_FieldCN, 'R', v_ip, v_db, p_FunctionTag);
  SET v_json_view = v_picker_data;
  
  -- 寫入暫存 Table (zen_wizard_jsondata)
  UPDATE zen_wizard_jsondata SET json_insert = v_json_insert WHERE uuid = p_uuid AND rowid = p_rowid;
  UPDATE zen_wizard_jsondata SET json_update = v_json_update WHERE uuid = p_uuid AND rowid = p_rowid;
  UPDATE zen_wizard_jsondata SET json_quickedit = v_json_quickedit WHERE uuid = p_uuid AND rowid = p_rowid;
  UPDATE zen_wizard_jsondata SET json_gridview = v_json_gridview WHERE uuid = p_uuid AND rowid = p_rowid;
  UPDATE zen_wizard_jsondata SET json_view = v_json_view WHERE uuid = p_uuid AND rowid = p_rowid;
END //

DELIMITER ;