import { Module } from '@nestjs/common';
import {
  CoreModule,
  AuthModule,
  DeviceModule,
  MailModule,
  PushModule,
  UsersModule,
  SuburbsModule,
  BusinessConfigModule,
  ErrorsModule,
  PetsModule,
  AdminModule,
  AdminsModule,
  BillingModule,
  AdsModule,
  AnalyticsModule,
  FeatureFlagsModule,
  NotificationsModule,
  StoriesModule,
  WalletModule,
  InvitesModule,
  OrgModule,
  QuickSnapsModule,
  ReferralsModule,
  ConversationsModule,
  AiModule,
} from './modules';
import { ThrottlerGuard } from '@nestjs/throttler';
import { APP_FILTER, APP_GUARD, APP_INTERCEPTOR, APP_PIPE } from '@nestjs/core';
import { GlobalExceptionFilter } from './middleware/global-exception.filter';
import { ZodSerializerInterceptor, ZodValidationPipe } from 'nestjs-zod';
import { SharedUtilsModule } from './utils/utils.module';
import { SecurityModule } from './middleware/security.module';

@Module({
  imports: [
    CoreModule,
    SecurityModule,
    FeatureFlagsModule,
    WalletModule,
    DeviceModule,
    MailModule,
    PushModule,
    AuthModule,
    UsersModule,
    SuburbsModule,
    BusinessConfigModule, // oldName: config
    ErrorsModule,
    PetsModule,
    SharedUtilsModule,
    AdminModule,
    AdminsModule,
    BillingModule,
    AdsModule,
    AnalyticsModule,
    NotificationsModule,
    StoriesModule,
    InvitesModule,
    OrgModule,
    QuickSnapsModule,
    ReferralsModule,
    ConversationsModule,
    AiModule,
  ],
  providers: [
    { provide: APP_GUARD, useClass: ThrottlerGuard },
    { provide: APP_INTERCEPTOR, useClass: ZodSerializerInterceptor },
    { provide: APP_FILTER, useClass: GlobalExceptionFilter },
    { provide: APP_PIPE, useClass: ZodValidationPipe },
  ],
})
export class AppModule {}
