package com.fkzy.warn.common.util.treeUtil;

import java.util.List;

/**
 * @author zhangjing
 * @date 2024/04/25 17:16
 * @description
 */
public class ForestNodeMerger {
    public ForestNodeMerger() {
    }

    /**
     * 对于每个节点，通过 getParentId() 方法获取其父节点的ID。
     * 如果父节点ID不等于0（即有父节点），则尝试通过 forestNodeManager.getTreeNodeAt() 方法获取父节点。
     * 如果成功获取到父节点，则将当前节点添加到父节点的子节点列表中。否则，说明父节点尚未被创建，需要通过 forestNodeManager.addParentId() 方法添加到待创建父节点的列表中。
     *
     * 最后，通过 forestNodeManager.getRoot() 方法获取合并后的树的根节点列表，并返回这个列表。
     */
    public static <T extends INode<T>> List<T> merge(List<T> items) {
        ForestNodeManager<T> forestNodeManager = new ForestNodeManager(items);
        items.forEach((forestNode) -> {
            if (forestNode.getParentId() != 0) {
                INode<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentId());
                if (node != null) {
                    node.getChildren().add(forestNode);
                } else {
                    forestNodeManager.addParentId(forestNode.getId());
                }
            }

        });
        return forestNodeManager.getRoot();
    }

}
