///|
fn is_cli_command(value : String) -> Bool {
  value == "demo" ||
  value == "benchmark" ||
  value == "version" ||
  value == "help" ||
  value == "--"
}

///|
fn command_name(args : Array[String]) -> String {
  if args.length() == 0 {
    return "demo"
  }
  if args[0] == "--" {
    if args.length() > 1 {
      return args[1]
    }
    return "demo"
  }
  if is_cli_command(args[0]) {
    return args[0]
  }
  if args.length() > 1 {
    if args[1] == "--" && args.length() > 2 {
      return args[2]
    }
    return args[1]
  }
  args[0]
}

///|
fn print_help() -> Unit {
  println("moon-distinct-sketch command line")
  println("")
  println("Usage: moon run cmd/main -- [command]")
  println("")
  println("Commands:")
  println("  demo       run a deterministic library walkthrough (default)")
  println("  benchmark  emit reproducible CSV benchmark measurements")
  println("  version    print the module version")
  println("  help       print this message")
}

///|
fn run_cli(args : Array[String]) -> Int {
  match command_name(args) {
    "demo" => run_demo()
    "benchmark" => run_benchmark()
    "version" => {
      println("yhsrtty/moon-distinct-sketch 0.2.1")
      0
    }
    "help" => {
      print_help()
      0
    }
    unknown => {
      println("unknown command: " + unknown)
      print_help()
      2
    }
  }
}

///|
fn main {
  let _ = run_cli(@env.args())
}