// modules/core/EventManager.js
const registry = new Map();

export const EventManager = {
    /**
     * Fügt einen EventListener hinzu und speichert ihn im Modul-Kontext
     */
    add(target, type, handler, { module = 'global', options = false } = {}) {
        target.addEventListener(type, handler, options);
        if (!registry.has(module)) registry.set(module, []);
        registry.get(module).push([target, type, handler, options]);
    },

    /**
     * Entfernt alle Listener, die für ein bestimmtes Modul registriert wurden
     */
    removeModule(module) {
        const entries = registry.get(module);
        if (!entries) return;

        entries.forEach(([target, type, handler, options]) => {
            target.removeEventListener(type, handler, options);
        });

        registry.delete(module);
    },

    /**
     * Entfernt alle Event-Listener aus allen Modulen
     */
    clearAll() {
        for (const [module, entries] of registry.entries()) {
            entries.forEach(([target, type, handler, options]) => {
                target.removeEventListener(type, handler, options);
            });
        }
        registry.clear();
    },

    /**
     * Debug: Gibt die aktuelle Registry in der Konsole aus
     */
    debug() {
        console.table([...registry.entries()].map(([module, events]) => ({
            module,
            listeners: events.length
        })));
    }
};
