DELIMITER //

CREATE OR REPLACE FUNCTION udf_create_json_comps_blob(
  p_FieldObject VARCHAR(200),
  p_tblName VARCHAR(100),
  p_FieldName VARCHAR(100)
) 
RETURNS TEXT
/*
  function   : zen_create_json_comps_others 的 kernel udf, 處理一段共用元件的基本設定
  description: 
  build date : 2023/12/22
  modified   : 2025/08/09 (轉換為 MariaDB 版本)
  
  modify history
    item who        date       modify docs
    ==== ========== ========== ================================================
    1    michael    2023/12/22 根據 v1.0 重構
    2    assistant  2025/08/09 轉換為 MariaDB 版本
*/
BEGIN
  DECLARE v_blob_data TEXT;
  DECLARE v_accept_type VARCHAR(200);
  DECLARE v_u_type VARCHAR(200);
  DECLARE v_ip VARCHAR(200);
  DECLARE v_db VARCHAR(200);
  DECLARE v_crlf VARCHAR(2);
  
  SET v_crlf = CONCAT(CHAR(13), CHAR(10));
  SET v_ip = '${ls:base_ip}';
  SET v_db = '${ls:base_db}';
  
  -- Input-image 和 file 會多一些 properties  
  -- input-file 有 "multiple": true, 但是測試有問題, 所以暫不支援
  SET v_blob_data = '';
  
  IF p_FieldObject = 'input-file' OR p_FieldObject = 'input-image' THEN
    IF p_FieldObject = 'input-file' THEN
      SET v_accept_type = '.pdf,.doc,.docx,.xls,.xlsx,.txt,.csv';
      SET v_u_type = 'files';
    ELSE
      SET v_accept_type = '.jpg,.png,.jpeg';
      SET v_u_type = 'images';
    END IF;
    
    SET v_blob_data = CONCAT(
      '                        "accept": "', v_accept_type, '",', v_crlf,
      '                        "//multiple": true,', v_crlf,
      '                        "receiver": "', v_ip, '/upload/', v_db, '/', v_u_type, '/",', v_crlf
    );
  ELSEIF p_FieldObject = 'textarea' THEN
    SET v_blob_data = CONCAT(
      '                        "showCounter": true,', v_crlf
    );
  ELSEIF p_FieldObject = 'select' THEN
    -- select 要分為2種, 一種是固定內容(直接產生 options), 另一種是動態讀取資料庫(select from source 如下)
    SET v_blob_data = CONCAT(
      '                      "source": {', v_crlf,
      '                        "method": "post",', v_crlf,
      '                        "url": "', v_ip, '/xapi/v2/', v_db, '/get_keyvalue/8/",', v_crlf,
      '                        "data": {', v_crlf,
      '                          "para01": "', p_tblName, '",', v_crlf,
      '                          "para02": "', p_FieldName, '"', v_crlf,
      '                        },', v_crlf,
      '                        "dataType": "form"', v_crlf,
      '                      },', v_crlf
    );
  ELSEIF p_FieldObject IN ('options', 'options-add', 'mapping') THEN
    -- 新增 options-add, 可以臨時新增前端選項(不會存起來) 2022-10-01  
    -- 取得 key-value
    SET v_blob_data = zen_get_keyvalue(p_tblName, p_FieldName);
    
    IF p_FieldObject = 'options-add' THEN
      SET v_blob_data = 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_blob_data
      );
    END IF;
  ELSEIF p_FieldObject = 'radios' THEN
    -- 取得 key-value
    SET v_blob_data = zen_get_keyvalue(p_tblName, p_FieldName);
  ELSEIF p_FieldObject IN ('switch', 'checkbox') THEN
    SET v_blob_data = CONCAT(
      '                    "trueValue": "Y",', v_crlf,
      '                    "falseValue": "N",', v_crlf
    );
  END IF;
  
  RETURN IFNULL(v_blob_data, '');
END //

DELIMITER ;