///|
#cfg(target="js")
fn cli_args() -> Array[String] {
  let args = @env.args()
  if args.length() < 2 {
    []
  } else {
    Array::makei(args.length() - 1, fn(i) { args[i + 1] })
  }
}

///|
#cfg(not(target="js"))
fn cli_args() -> Array[String] {
  @env.args()
}

///|
fn main {
  let args = cli_args()
  if args.length() == 3 {
    match args[1] {
      "reconcile-json" => println(@aqueous.reconcile_json(args[2]))
      "challenge-json" => println(@aqueous.challenge_json(args[2]))
      "replay-json" => println(@aqueous.replay_json(args[2]))
      _ =>
        println(
          "unknown sample-handling command; use reconcile-json, challenge-json or replay-json",
        )
    }
  } else {
    println(
      "MoonAqueousSpec - joint aliquot histories and zero-net-transfer checks",
    )
    println(
      "Usage: moon run cmd/main -- reconcile-json|challenge-json|replay-json ''",
    )
    println(
      "File input: python3 scripts/aliquots.py reconcile|challenge|replay --input FILE",
    )
    println(
      "Units: uL; nmol/L (TA neq/L); chemical transfer nmol. pH is not additive.",
    )
    println(
      "Model: Ca-carbonate-Na-Cl-water, complete declared ions and handling steps.",
    )
  }
}