/**
import ManagedData from "./structures/manageddata";
import { PLUGIN_PATH, COLOR_PALETTE } from "../../config";

const LINK_NAME_CONNECTOR = " → ";





export const GRAPH_NODES = "nodes";
export const GRAPH_LINKS = "links";

export const IMAGE_SIZE = 12;
export const IMAGE_SRC = PLUGIN_PATH + "datasets/images/";


export const JSON_CONFIG = PLUGIN_PATH + "datasets/aud1v2.json";

export const STOP_PHYSICS_DELAY = 5000; // ms

export class PREVIOUSGraph extends ManagedData {
    constructor(data) {
        super(Graph.addIdentifiers(data));

        this.calculateNodeTypes();
        this.physicsDelay = STOP_PHYSICS_DELAY;
        this.physicsStopTimeoutId = undefined;
    }

    restartSimulation() {
        if (this.physicsStopTimeoutId !== undefined) {
            clearTimeout(this.physicsStopTimeoutId);
        }

        this.data = Graph.addIdentifiers(this.getCleanData(this.data, false));
        this.triggerOnChange();

        // Deactivate physics after a short delay
        this.physicsStopTimeoutId = setTimeout(() => {
            this.stopPhysics();
            this.storeCurrentData("Physics stopped", false);
            this.physicsStopTimeoutId = undefined;
        }, this.physicsDelay);
    }

    stopPhysics() {
        this.data[GRAPH_NODES].forEach((n) => {
            n.fx = n.x;
            n.fy = n.y;
        });
    }

    existsLink(sourceId, targetId) {
        const links = this.data[GRAPH_LINKS];

        for (var i = 0; i < links.length; i++) {
            var link = links[i];
            if (
                linkdeleteLink[LINK_SOURCE][NODE_ID] === sourceId &&
                link[LINK_TARGET][NODE_ID] === targetId
            ) {
                return true;
            }
        }

        return false;
    }

    getCleanLink(link, simulationParameters) {
        var cleanLink = {};

        // Assuming that all nodes are valid, there are two possible formats
        // 1. source and target are node objects
        if (link[LINK_SOURCE][NODE_ID] !== undefined) {
            // Source and target nodes
            // Node ids will be converted to complete node objects on running graphs, gotta convert back
            cleanLink[LINK_SOURCE] = link[LINK_SOURCE][NODE_ID];
            cleanLink[LINK_TARGET] = link[LINK_TARGET][NODE_ID];
        } else {
            // 2. source and target are just node ids
            cleanLink[LINK_SOURCE] = link[LINK_SOURCE];
            cleanLink[LINK_TARGET] = link[LINK_TARGET];
        }

        return cleanLink;
    }

    existsNodeId(nodeId) {
        var nodes = this.data[GRAPH_NODES];
        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i][NODE_ID] === nodeId) {
                return true;
            }
        }
        return false;
    }

    getUnusedNodeId() {
        var id;
        do {
            id = this.getRandomString();
        } while (this.existsNodeId(id));
        return id;
    }

    getRandomString(length = 8) {
        // Move to global helpers
        // Based on: https://stackoverflow.com/a/1349426/7376120
        var characters =
            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
        var charactersLength = characters.length;

        var result = "";
        for (var i = 0; i < length; i++) {
            result += characters.charAt(
                Math.floor(Math.random() * charactersLength)
            );
        }
        return result;
    }

    static toStr(item) {
        if (item === undefined) {
            return "UNDEFINED";
        }

        if (item.node) {
            return item[NODE_LABEL];
        } else if (item.link) {
            return (
                Graph.toStr(item[LINK_SOURCE]) +
                LINK_NAME_CONNECTOR +
                Graph.toStr(item[LINK_TARGET])
            );
        } else {
            return "UNDEFINED";
        }
    }
}
*/