// Example: Mixed chart combining bar and line series on shared x-axis.
// Run: moon run examples/mixed_chart

///|
fn main {
  let barData = [
    @moonchart.DataPoint::withErrY(0.0, 35.0, 4.0),
    @moonchart.DataPoint::withErrY(1.0, 52.0, 3.5),
    @moonchart.DataPoint::withErrY(2.0, 68.0, 5.0),
    @moonchart.DataPoint::withErrY(3.0, 82.0, 3.0),
  ]
  let trendData = [
    @moonchart.DataPoint::new(0.0, 20.0),
    @moonchart.DataPoint::new(1.0, 60.0),
    @moonchart.DataPoint::new(2.0, 75.0),
    @moonchart.DataPoint::new(3.0, 80.0),
  ]

  let svg = @moonchart.Chart::new()
    .title("Expression Levels with Trend")
    .xTicks([0.0, 1.0, 2.0, 3.0], ["0h", "6h", "12h", "24h"])
    .xLabel("Time Point")
    .yLabel("Expression (fold change)")
    .yRange(0.0, 100.0)
    .yGrid(true)
    .barWidthRatio(0.25)
    .series(
      @moonchart.Series::bar("mRNA Level", barData).withColor(
        @moonchart.Color::rgb(93, 215, 255),
      ),
    )
    .series(
      @moonchart.Series::line("Expected Trend", trendData)
      .withColor(@moonchart.Color::rgb(212, 57, 57))
      .withPointSize(8.0)
      .withPointShape(@moonchart.Diamond),
    )
    .save("mixed_chart.svg")

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