import { Injectable } from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { GenericMessageEvent } from '@slack/bolt';
import { ClientMessageDto } from '../../../ticket/dto/client-message.dto';

/**
 * All of option present here can be safely removed.
 * They are not used anywhere.
 * They are left here for example purposes.
 * REMOVE THIS MESSAGES WHEN YOU MODIFY THIS SERVICE WITH YOUR OWN EVENTS
 */
export enum EEvent {
  SLACK_MESSAGE_RECEIVED,
  SOCKET_MESSAGE_RECEIVED,
  SOCKET_TICKET_READ,
}

/**
 * Currently this service is not used anywhere but it's left here, if it ever will be necessary.
 */
@Injectable()
export class EventService {
  constructor(private eventEmitter: EventEmitter2) {}

  emit(
    eventType: EEvent.SLACK_MESSAGE_RECEIVED,
    slackMessage: GenericMessageEvent
  );
  emit(
    eventType: EEvent.SOCKET_MESSAGE_RECEIVED,
    clientMessageDto: ClientMessageDto
  );
  emit(eventType: EEvent.SOCKET_TICKET_READ, ticketId: number);
  emit(eventType: EEvent, ...args: unknown[]) {
    this.eventEmitter.emit(eventType.toString(), ...args);
  }
}
