DELIMITER //

CREATE OR REPLACE PROCEDURE zen_import_fields(
  IN p_functiontag VARCHAR(100),
  IN p_tablename VARCHAR(100)
)
/*
  Function   : 回傳指定 table 的 schema 並寫入 zen_fields
  Description: 
  Build Date : 2021/08/14
  Modified   : 2025/08/09 (轉換為 MariaDB 並加入自動寫入功能)
  
  Call Sample: 
    CALL zen_import_fields('abc01','clinic');
  
  Modify History
    Item Who        Date       Modify Docs
    ==== ========== ========== ================================================
    1    Michael    
    2    Assistant  2025/08/09 轉換為 MariaDB 並加入自動寫入功能
*/
BEGIN
  DECLARE v_count INT;
  
  -- 檢查 zen_fields 表中是否已存在該 functiontag 的記錄
  SELECT COUNT(*) INTO v_count 
  FROM zen_fields 
  WHERE functiontag = p_functiontag;
  
	-- 創建臨時表存儲表結構
	DROP TEMPORARY TABLE IF EXISTS temp_schema;
	CREATE TEMPORARY TABLE temp_schema (
		tablename VARCHAR(60),
		fieldname VARCHAR(60),
		seqno INT,
		fieldobject VARCHAR(20),
		fieldlength INT,
		fielddefault VARCHAR(200),
		fieldchecknull VARCHAR(10),
		fieldcn NVARCHAR(60)
	);
	
	-- 從 information_schema 讀取表結構
	INSERT INTO temp_schema
	SELECT 
		p_tablename AS tablename,
		COLUMN_NAME AS fieldname,
		ORDINAL_POSITION AS seqno,
		DATA_TYPE AS fieldobject,
		CHARACTER_MAXIMUM_LENGTH AS fieldlength,
		COLUMN_DEFAULT AS fielddefault,
		IF(IS_NULLABLE = 'YES', 'Y', 'N') AS fieldchecknull,
		COLUMN_COMMENT AS fieldcn
	FROM information_schema.COLUMNS
	WHERE TABLE_NAME = p_tablename
	AND TABLE_SCHEMA = DATABASE()
	ORDER BY ORDINAL_POSITION;
	
	-- 處理空值
	UPDATE temp_schema SET fieldcn = '' WHERE fieldcn IS NULL;
	
	-- 如果 zen_fields 中沒有該 functiontag 的記錄，則插入新記錄
	IF v_count = 0 THEN
		INSERT INTO zen_fields (
		  functiontag, seqno, tablename, fieldname, fieldcn, fielden, fieldlength, 
		  fieldwidth, fieldobject, fielddefault, fieldchecknull, fieldblock, 
		  fieldds, fieldsh, fieldfm, fieldro, cellno, cellx, celly, cellline, datatype
		)
		SELECT 
		  p_functiontag, seqno, tablename, fieldname, fieldcn, '' AS fielden, fieldlength, 
		  120 AS fieldwidth, fieldobject, fielddefault, fieldchecknull, 0 AS fieldblock, 
		  CASE WHEN seqno <= 6 THEN 'Y' ELSE 'N' END AS fieldds, 'Y' AS fieldsh,
		  '' AS fieldfm, 'N' AS fieldro, 0 AS cellno, 1 AS cellx, 1 AS celly, 1 AS cellline, fieldobject
		FROM temp_schema;
	END IF;
	
	-- 返回結果
	SELECT 0 AS code, 'ok' AS msg;
	
	SELECT 
		p_functiontag AS functiontag, seqno, tablename, fieldname, fieldcn, '' AS fielden, fieldlength, 
		120 AS fieldwidth, fieldobject, fielddefault, fieldchecknull, 0 AS fieldblock, 
		CASE WHEN seqno <= 6 THEN 'Y' ELSE 'N' END AS fieldds, 'Y' AS fieldsh,
		'' AS fieldfm, 'N' AS fieldro, 0 AS cellno, 1 AS cellx, 1 AS celly, 1 AS cellline
	FROM temp_schema;
	
	DROP TEMPORARY TABLE IF EXISTS temp_schema;
  
END //

DELIMITER ;