export interface LeagueCreatedEvent {
  type: 'LeagueCreatedEvent';
  leagueId: string;
  ownerId: string;
  timestamp: Date;
}

export interface LeagueUpdatedEvent {
  type: 'LeagueUpdatedEvent';
  leagueId: string;
  updates: Partial<any>;
  timestamp: Date;
}

export interface LeagueDeletedEvent {
  type: 'LeagueDeletedEvent';
  leagueId: string;
  timestamp: Date;
}

export interface LeagueAccessedEvent {
  type: 'LeagueAccessedEvent';
  leagueId: string;
  driverId: string;
  timestamp: Date;
}

export interface LeagueEventPublisher {
  emitLeagueCreated(event: LeagueCreatedEvent): Promise<void>;
  emitLeagueUpdated(event: LeagueUpdatedEvent): Promise<void>;
  emitLeagueDeleted(event: LeagueDeletedEvent): Promise<void>;
  emitLeagueAccessed(event: LeagueAccessedEvent): Promise<void>;
  
  getLeagueCreatedEventCount(): number;
  getLeagueUpdatedEventCount(): number;
  getLeagueDeletedEventCount(): number;
  getLeagueAccessedEventCount(): number;
  
  clear(): void;
}
