///|
fn main {
  let certificate = @lease.certify_votes(
    [
      { voter: "node-1", candidate: "worker-a", term: 7, granted: true },
      { voter: "node-2", candidate: "worker-a", term: 7, granted: true },
      { voter: "node-3", candidate: "worker-b", term: 7, granted: true },
    ],
    3,
    7,
  )
  let elected = @lease.LeaseTable::new().acquire_leadership(
    "orders/leader", certificate, 10, 100,
  )
  guard elected.decision.lease is Some(first_lease) else {
    println("leadership acquisition failed")
    return
  }
  println("leader=" + first_lease.to_json())
  let first_write = @lease.FenceGuard::new().check(
    first_lease.fenced_write("commit-order-42", 101).unwrap(),
  )
  println("first_write=\{first_write.accepted}")
  let transferred = elected.table.apply(
    "orders/leader",
    Transfer("worker-a", first_lease.token, "worker-b", 10),
    102,
  )
  guard transferred.decision.lease is Some(second_lease) else {
    println("leadership transfer failed")
    return
  }
  let second_write = first_write.next_guard.check(
    second_lease.fenced_write("commit-order-43", 103).unwrap(),
  )
  let stale_write = second_write.next_guard.check({
    resource: first_lease.resource,
    holder: first_lease.holder,
    token: first_lease.token,
    operation: "late-commit-order-44",
  })
  println("next_leader=" + second_lease.to_json())
  println("next_write=\{second_write.accepted}")
  println("stale_write=\{stale_write.accepted}:\{stale_write.message}")
  println("metrics=" + transferred.table.metrics(103).to_json())
  println("audit=" + @lease.audit_events(transferred.table.events).to_json())
  println("simulation=" + @lease.run_failover_simulation(100, ttl=5).to_json())
}