///|
fn main {
  let args = @env.args()
  if args.length() > 1 {
    let blueprint = @layouts.build_standard_station()
    let engine = @simulator.SimulationEngine::new(
      blueprint.station,
      blueprint.table,
    )
    let runner = InteractiveRunner::new(engine)
    let command_parts : Array[String] = []
    let mut arg_index = 1
    while arg_index < args.length() {
      command_parts.push(args[arg_index])
      arg_index = arg_index + 1
    }
    println(runner.execute_command(command_parts.join(" ")))
  } else {
    println(
      "================================================================================",
    )
    println(
      "  MOONBIT RAILWAY COMPUTER INTERLOCKING (CI) SAFETY ENGINE TERMINAL SIMULATOR",
    )
    println(
      "================================================================================",
    )
    println("Initializing Standard 4-Track Station Blueprint...")

    let bp = @layouts.build_standard_station()
    let engine = @simulator.SimulationEngine::new(bp.station, bp.table)
    let runner = InteractiveRunner::new(engine)

    println("\n" + runner.execute_command("status"))

    println(
      "\n[SCENARIO 1] Requesting Receiving Route X-1G for High-Speed Train CRH380A...",
    )
    println(runner.execute_command("request 1"))
    println("\n" + runner.execute_command("status"))

    println(
      "\n[SCENARIO 2] Requesting Hostile Route X-3G (Expecting Fast Bitmask Rejection)...",
    )
    println(runner.execute_command("request 2"))

    println("\n[SCENARIO 3] Stepping 10ms Scan Engine Loop x 10 cycles...")
    println(runner.execute_command("step 10"))

    println(
      "\n[SCENARIO 4] Cancelling Active Route X-1G & Unlocking Station...",
    )
    println(runner.execute_command("cancel 1"))
    println("\n" + runner.execute_command("status"))

    println("Simulation finished cleanly.")
  }
}