"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.hookBus = exports.HookBus = void 0;
const logger_1 = require("../config/logger");
/**
 * Event bus entre plugins.
 * emit() executa todos os handlers registrados e retorna array de resultados.
 * O plugin uploads usa o último resultado não-nulo retornado pelo SmartVision.
 */
class HookBus {
    constructor() {
        this.handlers = new Map();
    }
    register(event, handler) {
        if (!this.handlers.has(event)) {
            this.handlers.set(event, []);
        }
        this.handlers.get(event).push(handler);
        logger_1.logger.debug({ event }, '[HookBus] Handler registrado');
    }
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    async emit(event, data) {
        const handlers = this.handlers.get(event);
        if (!handlers || handlers.length === 0)
            return [];
        const results = [];
        for (const handler of handlers) {
            try {
                const result = await handler(data);
                results.push(result);
            }
            catch (err) {
                logger_1.logger.error({ err, event }, '[HookBus] Erro em handler');
                results.push(null);
            }
        }
        return results;
    }
    /** Remove todos os handlers de um evento (usado no deactivate de plugins) */
    removeAll(event) {
        this.handlers.delete(event);
    }
    /** Lista eventos registrados — útil para debug */
    listEvents() {
        return Array.from(this.handlers.keys());
    }
}
exports.HookBus = HookBus;
exports.hookBus = new HookBus();
//# sourceMappingURL=hook-bus.js.map