DELIMITER //

CREATE OR REPLACE PROCEDURE zen_create_json_prepare_aside(
  IN p_uuid VARCHAR(100),
  IN p_aside_setup VARCHAR(100)
)
/*
  功能   : amis Wizard 產生 json UI 的核心程式(每個 Component 有各自的 json UI 定義)
  描述: 本段 sp 主要是設定 aside 中的 json 定義
  建立日期 : 2023/12/20
  
  修改歷史
    項目 誰         日期       修改說明
    ==== ========== ========== ================================================
    1    Michael    2023/12/20 根據 v1.0 重構
*/
BEGIN
  DECLARE v_aside_setup_id VARCHAR(100);
  DECLARE v_aside_field VARCHAR(100);
  DECLARE v_aside_filter VARCHAR(600);
  DECLARE v_aside_setup_data TEXT;
  DECLARE v_ip VARCHAR(100);
  DECLARE v_db VARCHAR(100);
  DECLARE v_pos INT;
  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}';

  /*
    如果 zen_function.aside_setup 有設定, 程式就要加入下面這一段(@aside_setup@)
    zen_function.aside_setup 的內容, 必須等於關聯 table 的欄位名稱(左方關聯的欄位)
    zen_function.aside_field 的內容, 是 右方主 table 的欄位名稱(和左方關聯的欄位)
    例如在 pbi 的 aside 是關聯 pms_sprint.sprintid, 就必須設定 aside_setup=sprintid, 右方資料 pbi, 關聯欄位是 aside_field=sprintid(通常會一樣, 但如果不同, 也可以分別設定)
           basperson 的 aside 是關聯 basdepartment.departmentid, 就必須設定 departmentid
  */
  -- 去除 @aside_setup 中的 tag
  SET v_pos = LOCATE('.',p_aside_setup);
  IF v_pos > 0 THEN
    SET v_aside_setup_id = SUBSTRING(p_aside_setup,v_pos+1,LENGTH(p_aside_setup));
  ELSE 
    SET v_aside_setup_id = p_aside_setup;
  END IF;
    
  SET v_aside_setup_data = '';
  IF IFNULL(p_aside_setup,'') <> '' THEN
    SET v_aside_setup_data = CONCAT(
        '    "asideResizor": true,', v_crlf,
        '    "asideMinWidth": 150,', v_crlf,
        '    "asideMaxWidth": 400,', v_crlf,
        '    "aside": {', v_crlf,
        '        "type": "form",', v_crlf,
        '        "className": "bg-green-100",', v_crlf,
        '        "wrapWithPanel": false,', v_crlf,
        '        "target": "dataList",', v_crlf,
        '        "submitOnInit": true,', v_crlf,
        '        "body": [{', v_crlf,
        '            "type": "input-tree",', v_crlf,
        '            "initiallyOpen": true,', v_crlf,
        '            "heightAuto": true,', v_crlf,
        '            "name": "',v_aside_setup_id,'",', v_crlf,
        '            "inputClassName": "no-border h-full",', v_crlf,
        '            "submitOnChange": true,', v_crlf,
        '            "selectFirst": false,', v_crlf,
        '            "source": {', v_crlf,
        '                "method": "post",', v_crlf,
        '                "url": "',v_ip,'/xapi/v2/',v_db,'/get_treedata/6/",', v_crlf,
        '                "data": {', v_crlf,
        '                    "para01": "',p_aside_setup,'"', v_crlf,
        '                },', v_crlf,
        '                "dataType": "form"', v_crlf,
        '            }', v_crlf,
        '        }]', v_crlf,
        '    },');
  
    IF IFNULL(v_aside_field,'') = '' THEN 
      SET v_aside_field = v_aside_setup_id;
    END IF;
    
    SET v_aside_filter = CONCAT(
        '"_id_": "${',v_aside_setup_id,'}",', v_crlf,
        '       "_field_": "',v_aside_field,'",');
  
    -- 寫入暫存表
    INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'aside_setup',v_aside_setup_data,NOW());
    INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'aside_filter',v_aside_filter,NOW());
  ELSE
    -- 沒有資料也要填空白
    INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'aside_setup','',NOW());
    INSERT INTO zen_wizard_tmp (uuid,zen_key,zen_value,create_date) VALUES (p_uuid,'aside_filter','',NOW());
  END IF;
END //

DELIMITER ;