// Trace Node Wrapper for debugging BT execution

///|
pub fn trace_node(name : String, child : Node) -> Node {
  let tick = fn(bb) {
    println("-> Tick: \{name}")
    let status = child.tick(bb)
    println("<- \{name} Result: \{status.to_string()}")
    status
  }
  let reset = fn() {
    println("[Reset] Node: \{name}")
    child.reset()
  }
  Node::new(tick, reset)
}

// Chainable trace method for builder

///|
pub fn Builder::trace(self : Builder, name : String) -> Builder {
  if self.stack.length() > 0 {
    let (_, children) = self.stack[self.stack.length() - 1]
    if children.length() > 0 {
      let idx = children.length() - 1
      children[idx] = trace_node(name, children[idx])
    }
  } else {
    match self.root {
      Some(node) => self.root = Some(trace_node(name, node))
      None => ()
    }
  }
  self
}