import { StateMachineBuilder } from "../fsm.ts";

const [locked, unlocked] = ["locked", "unlocked"] as const;

const smbTurnstile = new StateMachineBuilder()
  .withStates([locked, unlocked])
  .withTransitions([
    [locked, { coin: unlocked }],
    [unlocked, { push: locked }],
  ]);

async function main() {
  const sm = smbTurnstile.build(locked);

  function logCurrentState() {
    console.log("current state", JSON.stringify(sm.currentState.name));
  }

  logCurrentState();
  await sm.trigger("coin", {});
  logCurrentState();
  await sm.trigger("push", {});
  logCurrentState();
  await sm.trigger("push", {});
  logCurrentState();
}

if (import.meta.main) {
  main();
}