-- ================================================================
-- Fitness Agent 健康管理模块 - 数据库迁移脚本
-- 新增：体检报告、异常指标、禁忌规则、安全预警、复查提醒
-- ================================================================

-- 1. 体检报告记录表
CREATE TABLE IF NOT EXISTS health_checkups (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
  checkup_date DATE NOT NULL COMMENT '体检日期',
  hospital VARCHAR(100) DEFAULT '' COMMENT '体检机构/医院',
  summary TEXT COMMENT '体检总结/结论',
  overall_status ENUM('正常','基本正常','异常','需复查') DEFAULT '基本正常' COMMENT '总体评价',
  report_file VARCHAR(255) DEFAULT '' COMMENT '报告文件路径/URL',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_user_date (user_id, checkup_date DESC),
  INDEX idx_status (user_id, overall_status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='体检报告记录';

-- 2. 异常指标记录表
CREATE TABLE IF NOT EXISTS health_abnormal_indicators (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
  checkup_id BIGINT DEFAULT NULL COMMENT '关联体检报告ID',
  indicator_name VARCHAR(100) NOT NULL COMMENT '指标名称（如：总胆固醇、尿酸、ALT）',
  indicator_category VARCHAR(50) NOT NULL COMMENT '指标分类（血常规/肝功能/肾功能/血脂/血糖/尿酸/血压/其他）',
  result_value VARCHAR(100) NOT NULL COMMENT '检测结果值',
  unit VARCHAR(30) DEFAULT '' COMMENT '单位（如：mmol/L、μmol/L）',
  normal_range VARCHAR(100) DEFAULT '' COMMENT '正常参考范围',
  deviation ENUM('偏高','偏低','临界偏高','临界偏低') NOT NULL COMMENT '偏离方向',
  severity ENUM('注意','警示','危险') DEFAULT '注意' COMMENT '严重程度',
  status ENUM('待处理','观察中','已复查','已正常','需持续关注') DEFAULT '待处理' COMMENT '处理状态',
  doctor_advice TEXT COMMENT '医生建议',
  ai_analysis TEXT COMMENT 'AI分析解读',
  first_detected DATE NOT NULL COMMENT '首次发现日期',
  resolved_date DATE DEFAULT NULL COMMENT '恢复正常日期',
  note TEXT COMMENT '备注',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_user_indicator (user_id, indicator_name),
  INDEX idx_user_status (user_id, status),
  INDEX idx_severity (user_id, severity),
  INDEX idx_checkup (checkup_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='异常指标记录';

-- 3. 用户禁忌规则表
CREATE TABLE IF NOT EXISTS health_restrictions (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
  indicator_id BIGINT DEFAULT NULL COMMENT '关联异常指标ID（可为空，表示通用禁忌）',
  restriction_type ENUM('饮食','运动','作息','用药','其他') NOT NULL COMMENT '禁忌类型',
  rule_name VARCHAR(100) NOT NULL COMMENT '规则名称（如：高嘌呤食物、剧烈运动）',
  forbidden_items TEXT NOT NULL COMMENT '禁忌清单（JSON数组或逗号分隔）',
  reason TEXT COMMENT '禁忌原因',
  start_date DATE NOT NULL COMMENT '生效日期',
  end_date DATE DEFAULT NULL COMMENT '失效日期（NULL=长期有效）',
  priority ENUM('低','中','高','紧急') DEFAULT '中' COMMENT '优先级',
  is_active TINYINT(1) DEFAULT 1 COMMENT '是否生效',
  violation_consequence TEXT COMMENT '违反后果说明',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_user_active (user_id, is_active),
  INDEX idx_indicator (indicator_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户禁忌规则';

-- 4. 安全预警日志表
CREATE TABLE IF NOT EXISTS health_alerts (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
  indicator_id BIGINT DEFAULT NULL COMMENT '关联异常指标ID',
  alert_type ENUM('饮食违规','运动风险','指标恶化','复查逾期','禁忌冲突','综合预警') NOT NULL COMMENT '预警类型',
  severity ENUM('提示','警告','危险') NOT NULL COMMENT '严重级别',
  title VARCHAR(200) NOT NULL COMMENT '预警标题',
  detail TEXT NOT NULL COMMENT '预警详情',
  related_context TEXT COMMENT '相关上下文（JSON）',
  action_required VARCHAR(500) DEFAULT '' COMMENT '建议操作',
  status ENUM('未处理','已处理','已忽略') DEFAULT '未处理' COMMENT '处理状态',
  resolved_at TIMESTAMP NULL DEFAULT NULL COMMENT '处理时间',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_user_status (user_id, status),
  INDEX idx_severity (severity),
  INDEX idx_created (created_at DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='安全预警日志';

-- 5. 复查提醒表
CREATE TABLE IF NOT EXISTS health_reminders (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
  indicator_id BIGINT DEFAULT NULL COMMENT '关联异常指标ID',
  reminder_type ENUM('复查提醒','复诊提醒','用药提醒','生活调整','其他') NOT NULL COMMENT '提醒类型',
  title VARCHAR(200) NOT NULL COMMENT '提醒标题',
  description TEXT COMMENT '提醒内容',
  due_date DATE NOT NULL COMMENT '预计执行日期',
  remind_before_days INT DEFAULT 3 COMMENT '提前提醒天数',
  repeat_interval ENUM('不重复','每周','每月','每季度','每半年','每年') DEFAULT '不重复' COMMENT '重复周期',
  repeat_count INT DEFAULT 0 COMMENT '已重复次数',
  max_repeats INT DEFAULT 0 COMMENT '最大重复次数（0=不限）',
  status ENUM('待执行','已执行','已过期','已取消') DEFAULT '待执行' COMMENT '执行状态',
  completed_at TIMESTAMP NULL DEFAULT NULL COMMENT '实际完成时间',
  result TEXT COMMENT '执行结果/复查结论',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX idx_user_due (user_id, due_date),
  INDEX idx_user_status (user_id, status),
  INDEX idx_due_date (due_date, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='复查提醒';

-- 6. 指标变化追踪表（用于趋势分析）
CREATE TABLE IF NOT EXISTS health_indicator_trends (
  id BIGINT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(50) NOT NULL COMMENT '用户标识',
  indicator_name VARCHAR(100) NOT NULL COMMENT '指标名称',
  indicator_category VARCHAR(50) NOT NULL COMMENT '指标分类',
  record_date DATE NOT NULL COMMENT '检测日期',
  result_value VARCHAR(100) NOT NULL COMMENT '检测值',
  unit VARCHAR(30) DEFAULT '' COMMENT '单位',
  normal_range VARCHAR(100) DEFAULT '' COMMENT '参考范围',
  source ENUM('体检报告','自主检测','医院就诊') DEFAULT '体检报告' COMMENT '数据来源',
  note VARCHAR(255) DEFAULT '' COMMENT '备注',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_user_indicator (user_id, indicator_name, record_date),
  UNIQUE KEY uk_user_indicator_date (user_id, indicator_name, record_date)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='指标变化追踪';

-- 7. 用户异常指标概要表（汇总最新状态）
CREATE TABLE IF NOT EXISTS user_health_summary (
  id INT AUTO_INCREMENT PRIMARY KEY,
  user_id VARCHAR(50) NOT NULL UNIQUE COMMENT '用户标识',
  abnormal_count INT DEFAULT 0 COMMENT '当前异常指标数',
  critical_count INT DEFAULT 0 COMMENT '高危指标数',
  pending_reminders INT DEFAULT 0 COMMENT '待处理提醒数',
  active_restrictions INT DEFAULT 0 COMMENT '生效禁忌数',
  last_checkup_date DATE DEFAULT NULL COMMENT '最近体检日期',
  last_review_at TIMESTAMP NULL DEFAULT NULL COMMENT '最近AI审核时间',
  overall_risk_level ENUM('低','中','高') DEFAULT '低' COMMENT '综合风险等级',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户健康概要';
