DELIMITER //

CREATE OR REPLACE PROCEDURE eip_Calendar_crud (
  IN p_functiontag VARCHAR(100),
  IN p_id VARCHAR(100),
  IN p_title NVARCHAR(100),
  IN p_start_time VARCHAR(30),
  IN p_end_time VARCHAR(30),
  IN p_userid VARCHAR(20)
)
/*
  Function   : 行事曆資料的新增及修改, 並考慮雲端時間差問題
  Description: 使用 Vue+FullCalendar 開發行事曆, 並用 iFrame 崁入 amis 環境
               編輯行事曆: eip_Calendar_crud (本 sp)
               讀取行事曆: eip_getCalendar
               刪除行事曆: eip_Calendar_delete
               原本是傳入 tablename, 目前統一都改傳入 functiontag, 擴充彈性較大(盡量不動 Vue+FullCalendar)
  Build Date : 2023/07/19 (轉換為 MariaDB 版本)
  
  Modify History
    Item Who        Date       Modify Docs
    ==== ========== ========== ================================================
    1    Michael    2024/03/11 傳入參數由 tablename 改為 functiontag
    2    Michael    2025/07/20 改寫為 MariaDB 並最佳化(ChatGPT+DeepSeek)
*/
BEGIN
  DECLARE v_adjusted_start DATETIME;
  DECLARE v_adjusted_end DATETIME;
  
  -- 調整雲端時間 (假設 cloud_adjusttime 函數已存在)
  -- SET v_adjusted_start = cloud_adjusttime(p_start_time, 1);
  -- SET v_adjusted_end = cloud_adjusttime(p_end_time, 1);
  -- Michael 2025-11-21
  SET v_adjusted_start = STR_TO_DATE( REPLACE(REPLACE(p_start_time, 'T', ' '), '.000Z', ''), '%Y-%m-%d %H:%i:%s');
  SET v_adjusted_end = STR_TO_DATE( REPLACE(REPLACE(p_end_time, 'T', ' '), '.000Z', ''), '%Y-%m-%d %H:%i:%s');
  
  -- 根據不同的 functiontag 處理不同的表
  CASE p_functiontag
    WHEN 'eipm15' THEN -- 會議室預約
      UPDATE eipplace_fc SET
        response_desc = p_title,
        startdate = DATE(v_adjusted_start),
        starttime = TIME(v_adjusted_start),
        end_date = DATE(v_adjusted_end),
        endtime = TIME(v_adjusted_end)
      WHERE uniqueno = p_id;
    
    WHEN 'eipm13' THEN -- 會議通知
      UPDATE eipmeetingrec_m SET
        meeting_title = p_title,
        startdate = DATE(v_adjusted_start),
        starttime = TIME(v_adjusted_start),
        end_date = DATE(v_adjusted_end),
        end_time = TIME(v_adjusted_end)
      WHERE uniqueno = p_id;
    
    WHEN 'eipm02' THEN -- 行程管理
      UPDATE eip_new_calendar SET 
        title = p_title,
        start_time = v_adjusted_start,
        end_time = v_adjusted_end,
        s_date = DATE(v_adjusted_start),
        s_time = TIME_FORMAT(v_adjusted_start, '%H:%i'),
        e_date = DATE(v_adjusted_end),
        e_time = TIME_FORMAT(v_adjusted_end, '%H:%i')
      WHERE uuid = p_id;
    
    ELSE -- 默認處理 eip_core_calendar
      IF p_id = '-1' AND p_userid IS NOT NULL AND p_userid != '' THEN
        -- 新增記錄
        INSERT INTO eip_core_calendar (
          title, start_time, end_time, personid, 
          s_date, s_time, e_date, e_time
        ) VALUES (
          p_title, v_adjusted_start, v_adjusted_end, p_userid,
          DATE(v_adjusted_start),
          TIME_FORMAT(v_adjusted_start, '%H:%i'),
          DATE(v_adjusted_end),
          TIME_FORMAT(v_adjusted_end, '%H:%i')
        );
      ELSE
        -- 更新記錄
        UPDATE eip_core_calendar SET 
          title = p_title,
          start_time = v_adjusted_start,
          end_time = v_adjusted_end,
          s_date = DATE(v_adjusted_start),
          s_time = TIME_FORMAT(v_adjusted_start, '%H:%i'),
          e_date = DATE(v_adjusted_end),
          e_time = TIME_FORMAT(v_adjusted_end, '%H:%i')
        WHERE id = p_id;
      END IF;
  END CASE;
  
  -- 返回成功結果
  SELECT 0 AS code, 'ok' AS msg;
END //

DELIMITER ;