import py_trees
from behavior_library import *


def LoadMainTree() -> py_trees.trees.BehaviourTree:
    """
        此方法用于加载固定的顶层行为树（不包括实际执行）

        Args: None
    """

    seq_subtree_0 = py_trees.composites.Sequence(
        name='seq_subtree_0',
        memory=False,
        children=[IsChatting(), Chatting()]
    )

    seq_subtree_1 = py_trees.composites.Sequence(
        name='seq_subtree_1',
        memory=False,
        children=[IsTakingAction(), TakingAction()]
    )

    seq_subtree_2 = py_trees.composites.Sequence(
        name='seq_subtree_2',
        memory=False,
        children=[IsSomethingMore(), TakingMoreAction()]
    )

    root = py_trees.composites.Selector(
        name='selector_root',
        memory=False,
        children=[seq_subtree_0, seq_subtree_1, seq_subtree_2]
    )

    return py_trees.trees.BehaviourTree(root)


def LoadSubTree(path: str) -> py_trees.behaviour.Behaviour:
    """
        此方法用于从ptml文件中加载行为树（不包括实际执行）

        Args:
            -- path: ptml文件的路径
    """
    # TODO
    pass


if __name__ == '__main__':
    btree = LoadMainTree()


    def print_tree(tree):
        print(py_trees.display.unicode_tree(root=tree.root, show_status=True))


    try:
        btree.tick_tock(
            period_ms=500,
            number_of_iterations=py_trees.trees.CONTINUOUS_TICK_TOCK,
            pre_tick_handler=None,
            post_tick_handler=print_tree
        )
    except KeyboardInterrupt:
        btree.interrupt()
