// Example: Grouped bar chart with error bars.
// Run: moon run examples/bar_chart

///|
fn main {
  let ctrlData = [
    @moonchart.DataPoint::withErrY(0.0, 45.0, 3.0),
    @moonchart.DataPoint::withErrY(1.0, 62.0, 2.5),
    @moonchart.DataPoint::withErrY(2.0, 78.0, 4.0),
    @moonchart.DataPoint::withErrY(3.0, 91.0, 2.0),
  ]
  let treatData = [
    @moonchart.DataPoint::withErrY(0.0, 38.0, 2.0),
    @moonchart.DataPoint::withErrY(1.0, 55.0, 3.0),
    @moonchart.DataPoint::withErrY(2.0, 70.0, 3.5),
    @moonchart.DataPoint::withErrY(3.0, 85.0, 2.5),
  ]

  let svg = @moonchart.Chart::new()
    .title("Cell Viability After Treatment")
    .xTicks([0.0, 1.0, 2.0, 3.0], [
      "Control", "Low Dose", "Med Dose", "High Dose",
    ])
    .xLabel("Treatment Group")
    .yLabel("Viability (%)")
    .yRange(0.0, 100.0)
    .series(@moonchart.Series::bar("24h", ctrlData))
    .series(@moonchart.Series::bar("48h", treatData))
    .barWidthRatio(0.4)
    .barGap(0.1)
    .legend(true, @moonchart.TopLeft)
    .save("bar_chart.svg")

  match svg {
    Ok(s) => println(s)
    Err(e) => println("Error: \{e}")
  }
}