DELIMITER //

CREATE OR REPLACE PROCEDURE zen_create_json_comps_others_quickedit(
  IN p_uuid VARCHAR(100),
  IN p_FunctionTag VARCHAR(100),
  IN p_FieldObject VARCHAR(100),
  IN p_tblName VARCHAR(100),
  IN p_pk VARCHAR(100),
  IN p_FieldName VARCHAR(100),
  IN p_FieldCN NVARCHAR(100),
  IN p_query_type VARCHAR(1),
  IN p_picker_tag VARCHAR(100),
  IN p_FieldSH VARCHAR(1),
  IN p_required VARCHAR(100),
  IN p_fieldfm VARCHAR(100),
  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_comps TEXT;
  DECLARE v_ip VARCHAR(200);
  DECLARE v_db VARCHAR(200);
  DECLARE v_tmp2, v_tmp3 VARCHAR(800);
  DECLARE v_gridType VARCHAR(100);
  
  DECLARE v_blob_data TEXT;
  DECLARE v_field_df TEXT;
  DECLARE v_crlf VARCHAR(2);
  DECLARE v_qEdit TEXT;
  DECLARE v_cnt INT;
  
  SET v_crlf = CONCAT(CHAR(13), CHAR(10));
  SET v_ip = '${ls:base_ip}';
  SET v_db = '${ls:base_db}';
  
  -- for SingleGrid (Use quitEdit to Edit)	
  -- PK 不得編輯, 要判斷 required  
  SET v_qEdit = '';
  
  -- 检查是否为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_gridType = 'text';
    
    IF (p_FieldObject = 'select' OR p_FieldObject = 'options-add' OR p_FieldObject = 'options') THEN
      SET v_gridType = 'text';
      SET v_qEdit = zen_get_keyvalue(p_tblName, p_FieldName);
      
      -- 新增允許臨時再前端新增輸入的選項 2022-10-01 Michael
      IF p_FieldObject = 'options-add' THEN
        SET v_qEdit = CONCAT(
          '        "creatable": true,', v_crlf,
          '        "addControls": [', v_crlf,
          '          {', v_crlf,
          '            "type": "text",', v_crlf,
          '            "name": "label",', v_crlf,
          '            "label": "選項標題"', v_crlf,
          '          },', v_crlf,
          '          {', v_crlf,
          '            "type": "text",', v_crlf,
          '            "name": "value",', v_crlf,
          '            "label": "選項值"', v_crlf,
          '          }', v_crlf,
          '        ],', v_crlf,
          v_qEdit
        );
      END IF;
      
      -- option 是特殊的 select, 但還是 select
      SET p_FieldObject = 'select';
    ELSEIF (p_FieldObject = 'radios') THEN
      SET v_gridType = 'text';
      SET v_qEdit = zen_get_keyvalue(p_tblName, p_FieldName);
    ELSEIF (p_FieldObject = 'picker') THEN
      -- 待測試 2023/03/17(在 quickEdit 模式時，也能開窗查詢)
      SET v_gridType = 'text';
      SET v_qEdit = zen_picker(p_picker_tag, p_FieldName, p_FieldCN, 'R', v_ip, v_db, p_FunctionTag);
    ELSEIF (p_FieldObject = 'input-number') THEN
      SET v_gridType = 'text';
      -- 讀取設定
      IF IFNULL(p_fieldfm, '') = '' THEN
        SET p_fieldfm = 'd0';
      END IF;
      
      SET p_fieldfm = CONCAT('"${ls:sys@', p_fieldfm, '}"');
      
      SET v_qEdit = CONCAT(
        '                      "align": "right",', v_crlf,
        '            		 	 "precision": ', p_fieldfm, ','
      );
    ELSEIF (p_FieldObject = 'input-datetime') THEN
      SET v_qEdit = CONCAT(v_qEdit, '            		 	 "format": "YYYY-MM-DD HH:mm:ss.SSS",', v_crlf);
      SET v_gridType = 'static-date';
    ELSEIF (p_FieldObject = 'input-date') THEN
      SET v_qEdit = CONCAT(v_qEdit, '            		 	 "format": "YYYY-MM-DD",', v_crlf);
      SET v_gridType = 'static-date';
    ELSEIF (p_FieldObject = 'checkbox') THEN
      SET v_qEdit = CONCAT(v_qEdit,
        '            		 	 "inputClassName": "p-0 w-6",', v_crlf,
        '            		 	 "trueValue": "Y",', v_crlf,
        '            		 	 "falseValue": "N",', v_crlf
      );
      SET v_gridType = 'text';
    END IF;
    
    SET v_qEdit = CONCAT(
      '					 "quickEdit": {', v_crlf,
      '            		 	 "type": "', p_FieldObject, '",', v_crlf,
      p_required,
      v_qEdit, v_crlf,
      '            		 	 "mode": "inline"', v_crlf,
      '          			 },', v_crlf
    );
  ELSE
    -- pk 設為唯獨
    SET v_gridType = 'text';
  END IF;
          
  IF p_FieldSH = 'Y' THEN
    SET v_comps = CONCAT(
      '                  {', v_crlf,
      '                    "type": "', v_gridType, '",', v_crlf,
      '                    "name": "', p_FieldName, '",', v_crlf,
      v_qEdit,
      '                    "label": "', p_FieldCN, '"', v_crlf,
      '                  }'
    );
  END IF;
  
  UPDATE zen_wizard_jsondata SET json_quickedit = v_comps WHERE uuid = p_uuid AND rowid = p_rowid;
END //

DELIMITER ;