import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { RmqContext, RmqOptions, Transport } from '@nestjs/microservices';

@Injectable()
export class RmqService {
  constructor(private readonly configService: ConfigService) {}

  // Method to get RMQ options based on provided parameters
  getOptions(
    queue: string,
    noAck = false,
    persistent = true,
    prefetchCount = 1,
  ): RmqOptions {
    return {
      transport: Transport.RMQ,
      options: {
        urls: [this.configService.get<string>('RABBIT_MQ_URI') ?? ''],
        queue: `${queue}_QUEUE`,
        noAck,
        persistent,
        prefetchCount,
      },
    };
  }

  // Method to acknowledge an RMQ message
  ack(context: RmqContext) {
    const channel = context.getChannelRef();
    const originalMessage = context.getMessage();
    channel.ack(originalMessage);
  }
}
