/**
 * 树节点的基本接口
 */

/**
 * 格式化树结构数据
 * @param tree 要格式化的树结构数据
 * @param formatter 格式化函数，用于处理每个节点
 * @param childrenField 子节点字段名，默认为 'children'
 * @returns 格式化后的树结构
 */
export function formatTree(tree, formatter) {
  var childrenField = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';
  var format = function format(nodes) {
    var level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
    var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
    return nodes.map(function (node) {
      // 格式化当前节点
      var formattedNode = formatter(node, level, parent);

      // 如果有子节点，递归处理
      if (node[childrenField] && Array.isArray(node[childrenField])) {
        formattedNode[childrenField] = format(node[childrenField], level + 1, node);
      }
      return formattedNode;
    });
  };
  return format(tree);
}