import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ThrottlerModule } from '@nestjs/throttler';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { ScheduleModule } from '@nestjs/schedule';
import { AuthModule } from './modules/auth/auth.module';
import { FamiliesModule } from './modules/families/families.module';
import { ChildrenModule } from './modules/children/children.module';
import { DevicesModule } from './modules/devices/devices.module';
import { PoliciesModule } from './modules/policies/policies.module';
import { TimeWalletModule } from './modules/time-wallet/time-wallet.module';
import { MissionsModule } from './modules/missions/missions.module';
import { LearningModule } from './modules/learning/learning.module';
import { RequestsModule } from './modules/requests/requests.module';
import { NotificationsModule } from './modules/notifications/notifications.module';
import { AdminModule } from './modules/admin/admin.module';
import { HealthModule } from './modules/health/health.module';
import { DatabaseModule } from './database/database.module';
import appConfig from './config/app.config';
import authConfig from './config/auth.config';
import aiConfig from './config/ai.config';
import featuresConfig from './config/features.config';

@Module({
  imports: [
    // Configuração
    ConfigModule.forRoot({
      isGlobal: true,
      load: [appConfig, authConfig, aiConfig, featuresConfig],
      envFilePath: ['.env', '.env.local'],
    }),

    // Rate limiting
    ThrottlerModule.forRootAsync({
      inject: [ConfigService],
      useFactory: (config: ConfigService) => [
        {
          ttl: config.get<number>('THROTTLE_TTL', 60) * 1000,
          limit: config.get<number>('THROTTLE_LIMIT', 100),
        },
      ],
    }),

    // Eventos internos
    EventEmitterModule.forRoot({ wildcard: true }),

    // Cron jobs
    ScheduleModule.forRoot(),

    // Banco de dados
    DatabaseModule,

    // Módulos de negócio
    AuthModule,
    FamiliesModule,
    ChildrenModule,
    DevicesModule,
    PoliciesModule,
    TimeWalletModule,
    MissionsModule,
    LearningModule,
    RequestsModule,
    NotificationsModule,
    AdminModule,
    HealthModule,
  ],
})
export class AppModule {}
