-- =====================================================
-- 迁移脚本 006: 工作流暂停 & 审批记录表
-- 用途: 持久化 SOP-bound Agent 执行中的暂停状态与审批历史
--       支持 Runner 暂停/恢复、多审批人会签、超时检测
-- 关联: sop-compiler/workflow-pause-store.ts
--        sop-compiler/approval-handler.ts
--        tw-workbench/approval-store.ts
-- 创建时间: 2026-06-10
-- =====================================================

-- ---------------------------------------------------
-- 1. 工作流暂停表（tw_workflow_pause）
--    记录 Runner 在 human_form / human_confirm / human_review
--    步骤的暂停快照，支持跨服务重启恢复。
-- ---------------------------------------------------

CREATE TABLE IF NOT EXISTS tw_workflow_pause (
  pause_id              VARCHAR(64)   PRIMARY KEY   COMMENT '暂停ID',
  session_id            VARCHAR(64)   NOT NULL      COMMENT '会话ID',
  sop_id                VARCHAR(64)   NOT NULL      COMMENT 'SOP ID',
  avatar_id             VARCHAR(64)   DEFAULT NULL  COMMENT '专家分身ID',
  current_step_index    INT           NOT NULL      COMMENT '当前步骤索引(0-based)',
  reason                VARCHAR(32)   NOT NULL      COMMENT '暂停原因: human_form / human_confirm / human_review',
  current_step_json     TEXT          NOT NULL      COMMENT '当前步骤 ExpertWorkflowStep JSON',
  accumulated_output_json TEXT        DEFAULT NULL  COMMENT '累积输出 JSON',
  sla_deadline          DATETIME      DEFAULT NULL  COMMENT 'SLA 超时时间',
  status                INT           DEFAULT 0     COMMENT '0=待处理, 1=已处理, 2=已过期',
  created_at            DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  updated_at            DATETIME      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',

  INDEX idx_wp_session (session_id),
  INDEX idx_wp_status_deadline (status, sla_deadline),
  INDEX idx_wp_sop (sop_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='工作流暂停快照表';

-- ---------------------------------------------------
-- 2. 审批记录表（tw_approval_record）
--    记录每一次审批/表单提交/确认操作，支持会签判定。
-- ---------------------------------------------------

CREATE TABLE IF NOT EXISTS tw_approval_record (
  record_id             VARCHAR(64)   PRIMARY KEY   COMMENT '记录ID',
  pause_id              VARCHAR(64)   NOT NULL      COMMENT '关联暂停ID (FK → tw_workflow_pause.pause_id)',
  session_id            VARCHAR(64)   NOT NULL      COMMENT '会话ID（冗余，加速查询）',
  sop_id                VARCHAR(64)   DEFAULT NULL  COMMENT 'SOP ID（冗余，加速查询）',
  avatar_id             VARCHAR(64)   DEFAULT NULL  COMMENT '专家分身ID',
  operator_id           VARCHAR(64)   NOT NULL      COMMENT '操作人ID',
  action                VARCHAR(32)   NOT NULL      COMMENT '操作类型: approve / reject / submit / confirm / cancel',
  comment               TEXT          DEFAULT NULL  COMMENT '审批意见 / 备注',
  form_data             TEXT          DEFAULT NULL  COMMENT '表单数据 JSON（submit 操作时）',
  created_at            DATETIME      DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

  INDEX idx_ar_pause (pause_id),
  INDEX idx_ar_operator (operator_id),
  INDEX idx_ar_session (session_id),
  INDEX idx_ar_sop (sop_id),

  CONSTRAINT fk_ar_pause FOREIGN KEY (pause_id) REFERENCES tw_workflow_pause(pause_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批操作记录表';

-- ---------------------------------------------------
-- 3. 审批配置表（tw_approval_config）
--    存储 SOP 节点级别的审批人配置，独立于步骤 JSON
--    便于管理后台动态调整审批人而不重新编译步骤。
-- ---------------------------------------------------

CREATE TABLE IF NOT EXISTS tw_approval_config (
  config_id             VARCHAR(64)   PRIMARY KEY   COMMENT '配置ID',
  sop_id                VARCHAR(64)   NOT NULL      COMMENT 'SOP ID',
  node_id               VARCHAR(64)   NOT NULL      COMMENT 'SOP 节点ID',
  approve_type          VARCHAR(16)   NOT NULL      COMMENT '审批类型: or / and',
  approvers_json        TEXT          NOT NULL      COMMENT '审批人列表 JSON: [{type, refId, refName}]',
  sla_hours             INT           DEFAULT 24    COMMENT 'SLA 超时(小时)',
  reject_back_to        VARCHAR(64)   DEFAULT NULL  COMMENT '驳回目标节点ID',
  comment_required      INT           DEFAULT 0     COMMENT '是否强制填写审批意见: 0=否, 1=是',
  is_enabled            INT           DEFAULT 1     COMMENT '是否启用: 0=停用, 1=启用',
  created_at            DATETIME      DEFAULT CURRENT_TIMESTAMP,
  updated_at            DATETIME      DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

  INDEX idx_ac_sop_node (sop_id, node_id),

  CONSTRAINT fk_ac_sop FOREIGN KEY (sop_id) REFERENCES sop_base_info(ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='审批节点配置表';