import { nodes, edges } from "./graph.gen.js";

var container = document.getElementById("graph-container");
var options = {
    interaction: {
        hover: true
    },
    nodes: {
        shape: "dot",
        size: 16,
    },
    physics: {
        forceAtlas2Based: {
            gravitationalConstant: -10,
            centralGravity: 0.005,
            springLength: 230,
            springConstant: 0.18,
        },
        maxVelocity: 146,
        solver: "forceAtlas2Based",
        timestep: 0.35,
        stabilization: { iterations: 150 },
    },
};

var nodesDs = new vis.DataSet();
nodesDs.add(nodes);
var edgesDs = new vis.DataSet();
edgesDs.add(edges);
var network = new vis.Network(container, { nodes: nodesDs, edges: edgesDs }, options);

network.on("doubleClick", function (params) {
    params.event = "[original event]";
    if (params.nodes.length !== 1) return;
    window.open(nodesDs.get(params.nodes[0]).url, "_blank")
});
network.on("hoverNode", function (params) {
    nodesDs.update({ id: params.node, label: nodesDs.get(params.node).name });
});
network.on("blurNode", function (params) {
    nodesDs.update({ id: params.node, label: undefined });
});
// network.on("selectNode", function (params) {
//     for (const node of params.nodes) {
//         nodesDs.update({ id: node, label: nodesDs.get(node).name });
//     }
// });
// network.on("deselectNode", function (params) {
//     for (const node of params.previousSelection.nodes) {
//         if (params.nodes.some(n => n === node)) continue;
//         nodesDs.update({ id: node, label: undefined });
//     }
// });
