/**
 * --------------------------------------------------------------------------
 * Bootstrap (v5.1.3): dom/data.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 * --------------------------------------------------------------------------
 */

define([], function() {
    'use strict';

    /**
     * ------------------------------------------------------------------------
     * Constants
     * ------------------------------------------------------------------------
     */

    const elementMap = new Map();

    return {
        set: function (element, key, instance) {
            if (!elementMap.has(element)) {
                elementMap.set(element, new Map())
            }

            const instanceMap = elementMap.get(element);

            // make it clear we only want one instance per element
            // can be removed later when multiple key/instances are fine to be used
            if (!instanceMap.has(key) && instanceMap.size !== 0) {
                // eslint-disable-next-line no-console
                console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)
                return
            }

            instanceMap.set(key, instance)
        },

        get: function (element, key) {
            if (elementMap.has(element)) {
                return elementMap.get(element).get(key) || null
            }

            return null
        },

        remove: function (element, key) {
            if (!elementMap.has(element)) {
                return
            }

            const instanceMap = elementMap.get(element);

            instanceMap.delete(key)

            // free up element references if there are no instances left for an element
            if (instanceMap.size === 0) {
                elementMap.delete(element)
            }
        }
    }
});
