///|
/// RegressionDetector 性能退化检测 + Reporter 示例
///
/// 演示 BaselineStore + RegressionDetector + Snapshot + CompositeReporter
fn main {
  println("=== 性能退化检测示例 ===")
  println("")

  // 1. 创建基线存储并添加基线数据
  let baseline = @lib.BaselineStore::new()
  let stat1 = @lib.StatisticalSummary::new()
    .add(100L).add(110L).add(90L)
  let base1 = baseline.add("query-users", stat1)
  println("基线: query-users, mean=" + stat1.mean().to_string())

  // 2. 创建退化检测器(阈值 120%,即超过基线 20% 视为退化)
  let detector = @lib.RegressionDetector::new(base1, 120L)

  // 3. 当前测试结果
  let cur_stat = @lib.StatisticalSummary::new()
    .add(150L).add(160L).add(140L)
  println("当前: query-users, mean=" + cur_stat.mean().to_string())

  // 4. 检测退化
  let result = detector.detect("query-users", cur_stat)
  match result {
    None => println("未找到基线记录")
    Some(r) => {
      println("退化检测结果:")
      println("  基线均值: " + r.baseline_mean().to_string() + " ns")
      println("  当前均值: " + r.current_mean().to_string() + " ns")
      println("  比值: " + r.ratio().to_string() + "%")
      println("  是否退化: " + r.is_regression().to_string())
    }
  }

  // 5. 创建 Snapshot 保存当前状态
  let snapshot = @lib.Snapshot::new(1234567890L)
    .add_timing("query-users", 150L, [])

  // 6. 使用 CompositeReporter 同时输出到 Console 和 JSON
  let composite = @lib.CompositeReporter::new()
  let console = @lib.ConsoleReporter::new()
  let json = @lib.JsonReporter::new()
  composite.add_console(console)
  composite.add_json(json)

  composite.report_snapshot(snapshot)

  println("Composite JSON output:")
  println(json.output())

  // 7. 演示 Snapshot 序列化/反序列化
  let snap_json = snapshot.to_json()
  println("")
  println("Snapshot JSON:")
  println(snap_json)

  let restored = @lib.Snapshot::from_json(snap_json)
  println("反序列化条目数: " + restored.entry_count().to_string())

  println("")
  println("=== 示例结束 ===")
}