import useFlowStore from '../../../../../src/pages/VisProgPage/visualProgrammingUI/VisProgStores';
import addNode from "../../../../../src/pages/VisProgPage/visualProgrammingUI/utils/AddNode";
import type { PhaseNodeData } from "../../../../../src/pages/VisProgPage/visualProgrammingUI/nodes/PhaseNode";


describe('PhaseNode', () => {
  it('each created phase gets its own children array, not the same reference ', () => {
    // Create nodes
    addNode("phase", {x:10,y:10})
    addNode("phase", {x:20,y:20})
    addNode("norm", {x:30,y:30})
    addNode("norm", {x:40,y:40})
    addNode("goal", {x:50,y:50})

    // Find nodes
    const nodes = useFlowStore.getState().nodes;
    const p1 = nodes.find((x) => x.id === 'phase-1')!;
    const p2 = nodes.find((x) => x.id === 'phase-2')!;

    // expect same value, not same reference
    expect(p1.data.children).not.toBe(p2.data.children);
    expect(p1.data.children).toEqual(p2.data.children);

    // Add nodes to children
    let p1_data = p1.data as PhaseNodeData;
    let p2_data = p2.data as PhaseNodeData;
    p1_data.children.push("norm-1");
    p2_data.children.push("norm-2");
    p2_data.children.push("goal-1");

    // check that after adding, its not the same reference, and its not the same children
    expect(p1.data.children).not.toBe(p2.data.children);
    expect(p1.data.children).not.toEqual(p2.data.children);
    
    // expect them to have the correct length.
    expect(p1_data.children.length == 1);
    expect(p2_data.children.length == 2);
  });
});