import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { PrismaModule } from '@chatapp/database';
import { RedisModule, RedisService } from '@chatapp/redis';
import { AuthModule } from './modules/auth/auth.module';
import { UsersModule } from './modules/users/users.module';
import { WorkspacesModule } from './modules/workspaces/workspaces.module';
import { ChannelsModule } from './modules/channels/channels.module';
import { MessagesModule } from './modules/messages/messages.module';
import { DmsModule } from './modules/dms/dms.module';
import { FilesModule } from './modules/files/files.module';
import { SearchModule } from './modules/search/search.module';
import { NotificationsModule } from './modules/notifications/notifications.module';
import { IntegrationsModule } from './modules/integrations/integrations.module';
import { ListsModule } from './modules/lists/lists.module';
import { CanvasModule } from './modules/canvas/canvas.module';
import { HuddlesModule } from './modules/huddles/huddles.module';
import { AdminModule } from './modules/admin/admin.module';
import { AiModule } from './modules/ai/ai.module';
import { EnterpriseModule } from './modules/enterprise/enterprise.module';
import { ConnectModule } from './modules/connect/connect.module';
import { UserGroupsModule } from './modules/user-groups/user-groups.module';
import { RemindersModule } from './modules/reminders/reminders.module';
import { TemplatesModule } from './modules/templates/templates.module';
import { DataRetentionModule } from './modules/data-retention/data-retention.module';
import { LegalHoldsModule } from './modules/legal-holds/legal-holds.module';
import { InformationBarriersModule } from './modules/information-barriers/information-barriers.module';
import { SharedChannelsModule } from './modules/shared-channels/shared-channels.module';
import { DataExportModule } from './modules/data-export/data-export.module';
import { GuestsModule } from './modules/guests/guests.module';
import { BookmarksModule } from './modules/bookmarks/bookmarks.module';
import { ScheduledMessagesModule } from './modules/scheduled-messages/scheduled-messages.module';
import { HealthModule } from './modules/health/health.module';
import { RateLimitInterceptor } from './common/interceptors/rate-limit.interceptor';

@Module({
  imports: [
    // Configuration
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: '../../backend/.env',
    }),

    // Database
    PrismaModule,

    // Redis
    RedisModule,

    // Feature modules
    AuthModule,
    UsersModule,
    WorkspacesModule,
    ChannelsModule,
    MessagesModule,
    DmsModule,
    FilesModule,
    SearchModule,
    NotificationsModule,
    IntegrationsModule,
    ListsModule,
    CanvasModule,
    HuddlesModule,
    AdminModule,
    AiModule,
    EnterpriseModule,
    ConnectModule,
    UserGroupsModule,
    RemindersModule,
    TemplatesModule,
    DataRetentionModule,
    LegalHoldsModule,
    InformationBarriersModule,
    SharedChannelsModule,
    DataExportModule,
    GuestsModule,
    BookmarksModule,
    ScheduledMessagesModule,
    HealthModule,
  ],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: RateLimitInterceptor,
    },
  ],
})
export class AppModule {}