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

  let exp_count = 20
  let runs_per_exp = 50
  let mut total_runs = 0

  for e = 0; e < exp_count; e = e + 1 {
    let exp_id = "exp_\{e}"
    ignore(store.create_experiment(exp_id, "Benchmark Experiment \{e}"))
    for r = 0; r < runs_per_exp; r = r + 1 {
      let run_id = "run_\{e}_\{r}"
      ignore(store.start_run(run_id, exp_id, "2026-01-01T00:00:00Z"))
      ignore(
        store.log_param(
          run_id,
          @moontrack.Param::new_float("lr", 0.001 * (r + 1).to_double()),
        ),
      )
      ignore(
        store.log_param(
          run_id,
          @moontrack.Param::new_int("epochs", r * 10 + 10),
        ),
      )
      ignore(
        store.log_metric(
          run_id,
          @moontrack.Metric::new(
            "accuracy",
            0.5 + 0.001 * r.to_double(),
            r,
            "t",
          ),
        ),
      )
      ignore(
        store.log_metric(
          run_id,
          @moontrack.Metric::new("loss", 1.0 - 0.001 * r.to_double(), r, "t"),
        ),
      )
      if r % 3 == 0 {
        ignore(store.fail_run(run_id, "2026-01-01T01:00:00Z", "random failure"))
      } else {
        ignore(store.complete_run(run_id, "2026-01-01T01:00:00Z"))
      }
      total_runs = total_runs + 1
    }
  }

  println("Created \{exp_count} experiments with \{total_runs} total runs")

  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))
  println("Query returned \{results.length()} completed runs")

  let json = store.to_json()
  println("JSON export length: \{json.length()} chars")

  match store.compare_runs("run_0_0", "run_0_1") {
    Ok(cmp) =>
      println(
        "Compared \{cmp.baseline_id()} vs \{cmp.comparison_id()}: \{cmp.deltas().length()} deltas",
      )
    Err(err) => println("Compare error: \{err.message()}")
  }

  match store.metrics_csv("exp_0") {
    Ok(csv) => println("CSV export length: \{csv.length()} chars")
    Err(err) => println("CSV error: \{err.message()}")
  }
}