///|
fn main {
  println("MoonBit FSM CLI v0.2.1")

  let builder : @fsm.Builder[String, String, Int] = @fsm.Builder::new()
    .transition_do("Locked", "Coin", "Unlocked", fn(_s, _e, ctx) { ctx + 1 })
    .transition("Unlocked", "Push", "Locked")

  let engine = builder.build("Locked", 0)
  println("Initial state: \{engine.state()}")

  match engine.try_send("Coin") {
    Ok(_) => {
      println("Event: Coin -> New state: \{engine.state()}")
      println("Context after action: \{engine.context()}")
    }
    Err(err) => println("Error: \{@fsm.format_transition_error(err)}")
  }

  println("History entries: \{engine.history().length()}")
}