import { logger } from '../../utils/logger';

/**
 * Domain Event
 * @description 领域事件接口
 */
export interface DomainEvent {
  tenantId: string;
  traceId?: string;
  userId?: string;
  module: string;
  action: string;
  resourceType: string;
  resourceId?: string;
  data: any;
  timestamp: number;
}

/**
 * Domain Event Bus
 * @description 领域事件总线，负责处理领域事件
 */
export class DomainEventBus {
  private static instance: DomainEventBus;

  private constructor() {
    // 私有构造函数
  }

  /**
   * 获取实例
   */
  static getInstance() {
    if (!DomainEventBus.instance) {
      DomainEventBus.instance = new DomainEventBus();
      logger.info('🚀 DomainEventBus initialized');
    }
    return DomainEventBus.instance;
  }

  /**
   * 发布事件
   */
  publish(event: string, data: any) {
    logger.info(`[DomainEventBus] Published event: ${event}`);
    // 这里可以添加事件发布逻辑
  }

  /**
   * 订阅事件
   */
  subscribe(event: string, handler: (data: any) => void) {
    logger.info(`[DomainEventBus] Subscribed to event: ${event}`);
    // 这里可以添加事件订阅逻辑
  }

  /**
   * 订阅所有事件
   */
  subscribeAll(handler: (event: DomainEvent) => void) {
    logger.info('[DomainEventBus] Subscribed to all events');
    // 这里可以添加订阅所有事件的逻辑
  }
}
