import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { ScheduleModule } from '@nestjs/schedule';
import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler';
import { APP_GUARD } from '@nestjs/core';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AuthModule } from './auth/auth.module';
import { PoolsModule } from './pools/pools.module';
import { PredictionsModule } from './predictions/predictions.module';
import { JobsModule } from './jobs/jobs.module';
import { LembretesModule } from './lembretes/lembretes.module';
import { RankingModule } from './ranking/ranking.module';
import { ScoringModule } from './scoring/scoring.module';
import { SyncModule } from './sync/sync.module';
import { PrismaModule } from './prisma/prisma.module';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    ScheduleModule.forRoot(),
    // Teto global; endpoints sensíveis apertam mais com @Throttle.
    // Um único throttler nomeado. Throttlers nomeados extras seriam aplicados
    // a TODAS as rotas pelo ThrottlerGuard global, então o limite de login
    // acabaria valendo para o cadastro também.
    ThrottlerModule.forRoot([{ ttl: 60_000, limit: 100 }]),
    PrismaModule,
    AuthModule,
    PoolsModule,
    PredictionsModule,
    ScoringModule,
    SyncModule,
    RankingModule,
    LembretesModule,
    JobsModule,
  ],
  controllers: [AppController],
  providers: [AppService, { provide: APP_GUARD, useClass: ThrottlerGuard }],
})
export class AppModule {}
