///|
fn main {
  let store = @moontrack.TrackingStore::new()

  ignore(
    store.create_experiment("mnist_baseline", "MNIST Classification Baseline"),
  )

  // Run 1: baseline
  ignore(store.start_run("run_001", "mnist_baseline", "2026-01-15T09:00:00Z"))
  ignore(
    store.log_param(
      "run_001",
      @moontrack.Param::new_float("learning_rate", 0.001),
    ),
  )
  ignore(
    store.log_param("run_001", @moontrack.Param::new_int("batch_size", 32)),
  )
  ignore(store.log_param("run_001", @moontrack.Param::new_int("epochs", 10)))
  ignore(
    store.log_metric(
      "run_001",
      @moontrack.Metric::new("accuracy", 0.92, 1, "2026-01-15T09:30:00Z").with_direction(
        @moontrack.HigherBetter,
      ),
    ),
  )
  ignore(
    store.log_metric(
      "run_001",
      @moontrack.Metric::new("loss", 0.28, 1, "2026-01-15T09:30:00Z").with_direction(
        @moontrack.LowerBetter,
      ),
    ),
  )
  ignore(
    store.log_artifact(
      "run_001",
      @moontrack.Artifact::new("model.pt", "outputs/run_001/model.pt", 4567890),
    ),
  )
  ignore(
    store.set_reproducibility(
      "run_001",
      @moontrack.ReproducibilityInfo::new(
        "a1b2c3d", "python train.py --lr 0.001",
      ).with_random_seed(42),
    ),
  )
  ignore(store.complete_run("run_001", "2026-01-15T09:30:00Z"))

  // Run 2: improved
  ignore(store.start_run("run_002", "mnist_baseline", "2026-01-15T10:00:00Z"))
  ignore(
    store.log_param(
      "run_002",
      @moontrack.Param::new_float("learning_rate", 0.0005),
    ),
  )
  ignore(
    store.log_param("run_002", @moontrack.Param::new_int("batch_size", 64)),
  )
  ignore(store.log_param("run_002", @moontrack.Param::new_int("epochs", 20)))
  ignore(
    store.log_metric(
      "run_002",
      @moontrack.Metric::new("accuracy", 0.95, 1, "2026-01-15T10:45:00Z").with_direction(
        @moontrack.HigherBetter,
      ),
    ),
  )
  ignore(
    store.log_metric(
      "run_002",
      @moontrack.Metric::new("loss", 0.15, 1, "2026-01-15T10:45:00Z").with_direction(
        @moontrack.LowerBetter,
      ),
    ),
  )
  ignore(
    store.log_artifact(
      "run_002",
      @moontrack.Artifact::new("model.pt", "outputs/run_002/model.pt", 4567890),
    ),
  )
  ignore(
    store.set_reproducibility(
      "run_002",
      @moontrack.ReproducibilityInfo::new(
        "a1b2c3d", "python train.py --lr 0.0005",
      ).with_random_seed(42),
    ),
  )
  ignore(store.complete_run("run_002", "2026-01-15T10:45:00Z"))

  // Run 3: failed
  ignore(store.start_run("run_003", "mnist_baseline", "2026-01-15T11:00:00Z"))
  ignore(
    store.log_param(
      "run_003",
      @moontrack.Param::new_float("learning_rate", 0.1),
    ),
  )
  ignore(
    store.log_param("run_003", @moontrack.Param::new_int("batch_size", 128)),
  )
  ignore(
    store.log_metric(
      "run_003",
      @moontrack.Metric::new("accuracy", 0.10, 1, "2026-01-15T11:15:00Z").with_direction(
        @moontrack.HigherBetter,
      ),
    ),
  )
  ignore(store.fail_run("run_003", "2026-01-15T11:15:00Z", "Training diverged"))

  // Print Markdown report
  println(store.to_markdown())

  // Print JSON export
  println("=== JSON Export ===")
  println(store.to_json())

  // Compare runs
  println("=== Run Comparison: run_001 vs run_002 ===")
  match store.compare_runs("run_001", "run_002") {
    Ok(cmp) => {
      println("Baseline: \{cmp.baseline_id()}")
      println("Comparison: \{cmp.comparison_id()}")
      for delta in cmp.deltas() {
        let status = if delta.improved() { "IMPROVED" } else { "REGRESSED" }
        println(
          "  \{delta.key()}: \{delta.baseline_value()} -> \{delta.comparison_value()} [\{status}]",
        )
      }
    }
    Err(err) => println("Error: \{err.message()}")
  }

  // Query: top runs by accuracy
  println("=== Top Runs by Accuracy ===")
  let filter = @moontrack.RunFilter::new().with_statuses([@moontrack.Completed])
  let sort = @moontrack.SortKey::by_metric_descending("accuracy")
  let results = store.search_runs(filter, Some(sort))
  for run in results {
    let acc = match run.latest_metric("accuracy") {
      Some(m) => m.value()
      None => 0.0
    }
    println("  \{run.id()}: accuracy=\{acc}")
  }

  // Export metrics CSV
  println("=== Metrics CSV ===")
  match store.metrics_csv("mnist_baseline") {
    Ok(csv) => println(csv)
    Err(err) => println("Error: \{err.message()}")
  }
}