// 定义递归函数来查找指定 id 的节点及其子节点
function findNodeById(tree, id) {
  // 遍历树的每一个节点
  for (let node of tree) {
    // 如果当前节点的 id 匹配
    if (node.id === id) {
      return node; // 返回当前节点及其子节点
    }
    // 如果当前节点有子节点，则递归查找子节点
    if (node.children) {
      let result = findNodeById(node.children, id);
      if (result) {
        return result; // 如果找到了就直接返回结果
      }
    }
  }
  // 如果未找到匹配的节点，则返回空（null）
  return null;
}

// 定义一个函数来找到指定 id 节点及其所有子节点的完整信息
function findAllChildrenInfo(tree, id) {
  let node = findNodeById(tree, id); // 首先找到指定 id 的节点

  if (!node) {
    return null; // 如果找不到，返回 null
  }

  // 定义一个递归函数来获取节点及其所有子节点的完整信息
  function collectChildrenInfo(node) {
    let result = { ...node }; // 复制当前节点的所有属性

    if (result.children) {
      // 如果当前节点有子节点，则递归处理每一个子节点
      result.children = result.children.map((child) =>
        collectChildrenInfo(child)
      );
    }

    return result;
  }

  return collectChildrenInfo(node); // 返回节点及其所有子节点的完整信息
}

export function handleTreeId(id, tree) {
  // 测试示例
  const idToFind = id; // 要查找的 id
  const foundIds = findAllChildrenInfo(tree, idToFind); // 找到所有与 idToFind 相关的节点 id

  return foundIds.children;
}
