-- 提示词表改造迁移脚本
-- 将 prompt_config 表的功能整合到 prompts 表

-- 步骤1: 添加新字段
ALTER TABLE prompts
ADD COLUMN task_type ENUM('MEETING_TASK', 'KNOWLEDGE_TASK')
  COMMENT '任务类型：MEETING_TASK-会议任务, KNOWLEDGE_TASK-知识库任务' AFTER name;

ALTER TABLE prompts
ADD COLUMN is_default BOOLEAN NOT NULL DEFAULT FALSE
  COMMENT '是否为该任务类型的默认模板' AFTER content;

-- 步骤2: 修改 is_active 字段（如果存在且类型不是 BOOLEAN）
-- 先检查字段是否存在，如果不存在则添加
ALTER TABLE prompts
MODIFY COLUMN is_active BOOLEAN NOT NULL DEFAULT TRUE
  COMMENT '是否启用（只有启用的提示词才能被使用）';

-- 步骤3: 删除 tags 字段
ALTER TABLE prompts DROP COLUMN IF EXISTS tags;

-- 步骤4: 从 prompt_config 迁移数据（如果 prompt_config 表存在）
-- 更新 task_type 和 is_default
UPDATE prompts p
LEFT JOIN prompt_config pc ON p.id = pc.prompt_id
SET
  p.task_type = CASE
    WHEN pc.task_name IS NOT NULL THEN pc.task_name
    ELSE 'MEETING_TASK'  -- 默认值
  END,
  p.is_default = CASE
    WHEN pc.is_default = 1 THEN TRUE
    ELSE FALSE
  END
WHERE pc.prompt_id IS NOT NULL OR p.task_type IS NULL;

-- 步骤5: 为所有没有设置 task_type 的提示词设置默认值
UPDATE prompts
SET task_type = 'MEETING_TASK'
WHERE task_type IS NULL;

-- 步骤6: 将 task_type 设置为 NOT NULL
ALTER TABLE prompts
MODIFY COLUMN task_type ENUM('MEETING_TASK', 'KNOWLEDGE_TASK') NOT NULL
  COMMENT '任务类型：MEETING_TASK-会议任务, KNOWLEDGE_TASK-知识库任务';

-- 步骤7: 确保每个 task_type 只有一个默认提示词
-- 如果有多个默认，只保留 id 最小的那个
UPDATE prompts p1
LEFT JOIN (
  SELECT task_type, MIN(id) as min_id
  FROM prompts
  WHERE is_default = TRUE
  GROUP BY task_type
) p2 ON p1.task_type = p2.task_type
SET p1.is_default = FALSE
WHERE p1.is_default = TRUE AND p1.id != p2.min_id;

-- 步骤8: (可选) 备注 prompt_config 表已废弃
-- 如果需要删除 prompt_config 表，取消下面的注释
-- DROP TABLE IF EXISTS prompt_config;

-- 迁移完成
SELECT '提示词表迁移完成！' as message;
SELECT task_type, COUNT(*) as total, SUM(is_default) as default_count
FROM prompts
GROUP BY task_type;
