///|
fn main {
  let source = "root root\n" +
    "blackboard enemy_visible true\n" +
    "blackboard ammo 2\n" +
    "selector root engage patrol\n" +
    "sequence engage see_enemy has_ammo aim fire\n" +
    "condition see_enemy enemy_visible eq true\n" +
    "condition has_ammo ammo gt 0\n" +
    "action aim aim_weapon running,success mode=aiming\n" +
    "action fire fire_weapon success ammo=1 result=hit\n" +
    "action patrol patrol_area success mode=patrol\n"

  match @moonbtkit.parse_dsl(source) {
    Ok(doc) => {
      let engine = @moonbtkit.new_engine(doc.tree, blackboard=doc.blackboard)
      match engine.run_until_done(max_ticks=6) {
        Ok(result) => {
          println(result.summary())
          println("digest: " + engine.trace_digest())
          println("timeline:")
          println(@moonbtkit.timeline_text(engine.trace))
          println(
            "coverage: " +
            @moonbtkit.coverage_from_trace(doc.tree, engine.trace).summary(),
          )
          println("mermaid:")
          println(
            @moonbtkit.tree_to_mermaid(
              doc.tree,
              options=@moonbtkit.compact_visual_options(),
            ),
          )
        }
        Err(err) => println("run error: " + err.message())
      }
    }
    Err(err) => println("parse error: " + err.message())
  }
}