import { AppConfigModule } from '@/config/config.module';
import { DatabaseModule } from '@/database/database.module';
import { LogModule } from '@/logger/logger.module';
import { Module } from '@nestjs/common';
import { ThrottlerModule } from '@nestjs/throttler';
import { BullModule } from '@nestjs/bullmq';
import { ConfigService } from '@nestjs/config';
import { AppConfig } from '@/config/configs';

@Module({
  imports: [
    AppConfigModule,
    DatabaseModule,
    ThrottlerModule.forRoot({
      throttlers: [
        {
          ttl: 10 * 60 * 1000,
          limit: 100,
        },
      ],
      errorMessage: 'Too many requests, please try again later.',
    }),
    LogModule,
    BullModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (config: ConfigService<AppConfig, true>) => ({
        connection: config.get('redis', { infer: true }),
      }),
    }),
  ],
  exports: [AppConfigModule, DatabaseModule, ThrottlerModule, LogModule],
})
export class CoreModule {}
