import { BullModule } from "@nestjs/bullmq";
import { Global, Module } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { WebhookDeliveryProcessor } from "./webhook-delivery.processor";
import { WebhookEventService } from "./webhook-event.service";
import { WEBHOOK_DELIVERY_QUEUE } from "./webhook-events.constants";

@Global()
@Module({
  imports: [
    BullModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (config: ConfigService) => ({
        connection: {
          host: config.get<string>("REDIS_HOST") ?? "localhost",
          port: Number(config.get("REDIS_PORT") ?? 6379),
          password: config.get<string>("REDIS_PASSWORD") || undefined,
        },
      }),
    }),
    BullModule.registerQueue({ name: WEBHOOK_DELIVERY_QUEUE }),
  ],
  providers: [WebhookEventService, WebhookDeliveryProcessor],
  exports: [WebhookEventService, BullModule],
})
export class WebhookEventModule {}
