///|
pub fn format_eta_result(result : EtaResult) -> String {
  "eta=\{result.eta_seconds}s speed=\{result.smoothed_speed}m/s confidence=\{result.confidence}"
}

///|
pub fn format_error_summary(summary : ErrorSummary) -> String {
  "count=\{summary.count} mae=\{summary.mae} rmse=\{summary.rmse} mape=\{summary.mape} max=\{summary.max_error}"
}

///|
pub fn format_calibration(result : CalibrationResult) -> String {
  "best_congestion=\{result.best_congestion} \{format_error_summary(result.best_error)}"
}

///|
pub fn demo_report() -> String {
  let results = run_demo()
  let last = if results.length() == 0 {
    {
      eta_seconds: 0.0,
      smoothed_speed: 0.0,
      raw_speed: 0.0,
      confidence: 0.0,
      remaining_distance: 0.0,
    }
  } else {
    results[results.length() - 1]
  }
  let calibration = calibrate_demo()
  "MoonBit ETA report\n\{format_eta_result(last)}\n\{format_calibration(calibration)}"
}