///|
fn print_help() -> Unit {
  println("VoltWeave " + @core.version)
  println("Usage: voltweave ")
  println("")
  println("Commands:")
  println("  demo       optimized household plan as Markdown")
  println("  compact    apartment plan without solar or battery")
  println("  outage     storm-outage plan and energy timeline")
  println("  compare    preferred-time baseline comparison")
  println("  simulate   40-run deterministic uncertainty report")
  println("  validate   validation report for the household example")
  println("  json       optimized household result as JSON")
  println("  input      household input contract as JSON")
  println("  chart      terminal-friendly household load chart")
  println("  help       show this message")
}

///|
fn main {
  let args = @env.args()
  if args.length() < 2 {
    print_help()
    return
  }
  match args[1] {
    "help" | "--help" | "-h" => print_help()
    "demo" =>
      println(@core.plan_markdown(@core.solve(@core.home_day_example())))
    "compact" =>
      println(
        @core.plan_markdown(@core.solve(@core.compact_apartment_example())),
      )
    "outage" => {
      let result = @core.solve(@core.storm_outage_example())
      println(@core.plan_markdown(result))
      println(@core.plan_timeline(result))
    }
    "compare" =>
      println(
        @core.comparison_markdown(
          @core.compare_with_baseline(@core.home_day_example()),
        ),
      )
    "simulate" =>
      println(
        @core.simulation_markdown(
          @core.simulate(@core.storm_outage_example(), runs=40),
        ),
      )
    "validate" =>
      println(
        @core.validation_markdown(@core.validate(@core.home_day_example())),
      )
    "json" => println(@core.solve(@core.home_day_example()).to_json_string())
    "input" => println(@core.home_day_example().to_json_string())
    "chart" =>
      println(@core.plan_ascii_chart(@core.solve(@core.home_day_example())))
    command => {
      println("Unknown command: " + command)
      print_help()
    }
  }
}