import { EventEmitter } from 'events';

/**
 * AgentEvents: 시스템 전체의 이벤트를 관리하는 관찰자(Observer) 허브.
 * 모듈 간 결합도를 낮추기 위해 직접 호출 대신 이벤트를 발행-구독합니다.
 */
export class AgentEvents extends EventEmitter {
    private static instance: AgentEvents;

    private constructor() {
        super();
        this.setMaxListeners(20);
    }

    public static getInstance(): AgentEvents {
        if (!AgentEvents.instance) {
            AgentEvents.instance = new AgentEvents();
        }
        return AgentEvents.instance;
    }
}

/**
 * 표준 이벤트 타입 정의
 */
export enum AgentEventTypes {
    DATA_READY = 'data:ready',
    TASK_STARTED = 'task:started',
    TASK_COMPLETED = 'task:completed',
    ERROR_OCCURRED = 'error:occurred',
    TRANSACTION_COMMITTED = 'transaction:committed',
    TRANSACTION_ROLLED_BACK = 'transaction:rolled_back'
}

export const agentEvents = AgentEvents.getInstance();
