-- =============================================
-- 编排调度功能 - 数据库表创建脚本
-- 创建时间: 2025-11-30
-- 说明: 创建编排调度相关的5张表
-- =============================================

-- 1. 编排方案表
CREATE TABLE IF NOT EXISTS martial_schedule_plan (
  id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  competition_id BIGINT NOT NULL COMMENT '赛事ID',
  plan_name VARCHAR(100) COMMENT '方案名称',
  plan_type TINYINT DEFAULT 1 COMMENT '方案类型: 1-自动生成, 2-手动调整',
  status TINYINT DEFAULT 0 COMMENT '状态: 0-草稿, 1-已确认, 2-已发布',

  -- 编排参数
  start_time DATETIME COMMENT '比赛开始时间',
  end_time DATETIME COMMENT '比赛结束时间',
  venue_count INT DEFAULT 0 COMMENT '场地数量',
  time_slot_duration INT DEFAULT 30 COMMENT '时间段长度(分钟)',

  -- 规则配置
  rules JSON COMMENT '编排规则配置',

  -- 统计信息
  total_matches INT DEFAULT 0 COMMENT '总场次',
  conflict_count INT DEFAULT 0 COMMENT '冲突数量',

  -- 审计字段
  created_by BIGINT COMMENT '创建人',
  approved_by BIGINT COMMENT '审批人',
  approved_time DATETIME COMMENT '审批时间',
  published_time DATETIME COMMENT '发布时间',

  -- 标准字段
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-否, 1-是',

  INDEX idx_competition (competition_id),
  INDEX idx_status (status),
  INDEX idx_create_time (create_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='编排方案表';

-- 2. 时间槽表
CREATE TABLE IF NOT EXISTS martial_schedule_slot (
  id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  plan_id BIGINT NOT NULL COMMENT '编排方案ID',
  venue_id BIGINT COMMENT '场地ID',

  -- 时间信息
  slot_date DATE COMMENT '比赛日期',
  start_time TIME COMMENT '开始时间',
  end_time TIME COMMENT '结束时间',
  duration INT DEFAULT 0 COMMENT '时长(分钟)',

  -- 项目信息
  project_id BIGINT COMMENT '项目ID',
  category VARCHAR(50) COMMENT '组别',

  -- 排序
  sort_order INT DEFAULT 0 COMMENT '排序号',

  -- 状态
  status TINYINT DEFAULT 0 COMMENT '状态: 0-未开始, 1-进行中, 2-已完成',

  -- 标准字段
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-否, 1-是',

  INDEX idx_plan (plan_id),
  INDEX idx_venue (venue_id),
  INDEX idx_time (slot_date, start_time),
  INDEX idx_project (project_id),
  INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='编排时间槽表';

-- 3. 运动员-时间槽关联表
CREATE TABLE IF NOT EXISTS martial_schedule_athlete_slot (
  id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  slot_id BIGINT NOT NULL COMMENT '时间槽ID',
  athlete_id BIGINT NOT NULL COMMENT '运动员ID',

  -- 出场信息
  appearance_order INT DEFAULT 0 COMMENT '出场顺序',
  estimated_time TIME COMMENT '预计出场时间',

  -- 状态
  check_in_status TINYINT DEFAULT 0 COMMENT '签到状态: 0-未签到, 1-已签到',
  performance_status TINYINT DEFAULT 0 COMMENT '比赛状态: 0-未开始, 1-进行中, 2-已完成',

  -- 调整记录
  is_adjusted TINYINT DEFAULT 0 COMMENT '是否调整过',
  adjust_note VARCHAR(200) COMMENT '调整备注',

  -- 标准字段
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-否, 1-是',

  INDEX idx_slot (slot_id),
  INDEX idx_athlete (athlete_id),
  INDEX idx_order (appearance_order),
  UNIQUE KEY uk_slot_athlete (slot_id, athlete_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='运动员时间槽关联表';

-- 4. 编排冲突记录表
CREATE TABLE IF NOT EXISTS martial_schedule_conflict (
  id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  plan_id BIGINT NOT NULL COMMENT '编排方案ID',
  conflict_type TINYINT COMMENT '冲突类型: 1-时间冲突, 2-场地冲突, 3-规则违反',
  severity TINYINT COMMENT '严重程度: 1-警告, 2-错误, 3-致命',

  -- 冲突详情
  entity_type VARCHAR(20) COMMENT '实体类型: athlete/venue/slot',
  entity_id BIGINT COMMENT '实体ID',
  conflict_description TEXT COMMENT '冲突描述',

  -- 解决状态
  is_resolved TINYINT DEFAULT 0 COMMENT '是否已解决',
  resolve_method VARCHAR(100) COMMENT '解决方法',

  -- 标准字段
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  is_deleted TINYINT DEFAULT 0 COMMENT '是否删除: 0-否, 1-是',

  INDEX idx_plan (plan_id),
  INDEX idx_type (conflict_type),
  INDEX idx_resolved (is_resolved)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='编排冲突记录表';

-- 5. 编排调整日志表
CREATE TABLE IF NOT EXISTS martial_schedule_adjustment_log (
  id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
  plan_id BIGINT NOT NULL COMMENT '编排方案ID',

  -- 操作信息
  action_type VARCHAR(20) COMMENT '操作类型: move/swap/delete/insert',
  operator_id BIGINT COMMENT '操作人ID',
  operator_name VARCHAR(50) COMMENT '操作人姓名',
  operator_role VARCHAR(20) COMMENT '操作人角色: admin/referee',

  -- 变更详情
  before_data JSON COMMENT '变更前数据',
  after_data JSON COMMENT '变更后数据',
  reason VARCHAR(200) COMMENT '调整原因',

  -- 时间
  action_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',

  INDEX idx_plan (plan_id),
  INDEX idx_operator (operator_id),
  INDEX idx_time (action_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='编排调整日志表';

-- =============================================
-- 数据验证查询
-- =============================================

-- 验证表是否创建成功
SELECT
    TABLE_NAME,
    TABLE_COMMENT,
    TABLE_ROWS,
    CREATE_TIME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'martial_db'
  AND TABLE_NAME LIKE 'martial_schedule%'
ORDER BY TABLE_NAME;
