import { Global, Logger, Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bullmq';
import { getBullMqRedisConnection } from './bullmq.connection';
import { AI_REPORT_JOB_OPTIONS } from './queue.constants';

@Global()
@Module({
    imports: [
        // forRootAsync runs after dotenv.config() in bootstrap — forRoot() ran at import time
        // and connected to 127.0.0.1 instead of Redis Cloud.
        BullModule.forRootAsync({
            useFactory: () => {
                const connection = getBullMqRedisConnection();
                Logger.log(
                    `BullMQ Redis ${connection.host}:${connection.port} tls=${!!connection.tls}`,
                    'QueueModule',
                );
                return {
                    connection,
                    defaultJobOptions: {
                        attempts: AI_REPORT_JOB_OPTIONS.attempts,
                        backoff: {
                            type: 'exponential',
                            delay: AI_REPORT_JOB_OPTIONS.backoffDelayMs,
                        },
                        removeOnComplete: { count: 50 },
                        removeOnFail: { count: 100 },
                    },
                };
            },
        }),
    ],
    exports: [BullModule],
})
export class QueueModule { }
