import { Module } from '@nestjs/common';
import { HttpModule } from '@nestjs/axios';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { NotificationsController } from './notifications.controller';
import { NotificationsService } from './notifications.service';
import { PushAdapter } from './notification.adapters';
import { EmailClientService } from './email-client.service';
import { SmsClientService } from './sms-client.service';

@Module({
  imports: [
    // Required by IamGuard (injects HttpService) used in NotificationsController.
    HttpModule.register({ timeout: 10_000 }),
    ClientsModule.register([
      {
        name: 'EMAIL_SERVICE',
        transport: Transport.RMQ,
        options: {
          urls: [process.env.RABBITMQ_URL as string],
          queue: process.env.EMAIL_QUEUE ?? 'email_queue',
          queueOptions: { durable: true },
        },
      },
      {
        name: 'SMS_SERVICE',
        transport: Transport.RMQ,
        options: {
          urls: [process.env.RABBITMQ_URL as string],
          queue: process.env.SMS_QUEUE ?? 'sms_queue',
          queueOptions: { durable: true },
        },
      },
    ]),
  ],
  controllers: [NotificationsController],
  providers: [
    NotificationsService,
    PushAdapter,
    EmailClientService,
    SmsClientService,
  ],
  exports: [NotificationsService, EmailClientService, SmsClientService],
})
export class NotificationsModule {}
