import type { ID } from '../../../types';
import { DagreGraph } from '../graph';

/**
 * 按照数据中的结果设置fixorder
 */
export const initDataOrder = (g: DagreGraph, nodeOrder?: ID[]) => {
  const simpleNodes = g.getAllNodes().filter((v) => {
    return !g.getChildren(v.id)?.length;
  });
  const ranks = simpleNodes.map((v) => v.data.rank!);
  const maxRank = Math.max(...ranks);
  const layers: ID[][] = [];
  for (let i = 0; i < maxRank + 1; i++) {
    layers[i] = [];
  }

  nodeOrder?.forEach((n) => {
    const node = g.getNode(n);
    // 只考虑原有节点，dummy节点需要按照后续算法排出
    if (!node || node.data.dummy) {
      return;
    }
    if (!isNaN(node.data.rank!)) {
      node.data.fixorder = layers[node.data.rank!].length; // 设置fixorder为当层的顺序
      layers[node.data.rank!].push(n);
    }
  });
};
