import { Logger, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import envConfig from './common/config/envConfig';
import { DatabaseModule } from './common/database/database.module';
import { selectEnv } from './common/env/config';
import { AuthModule } from './modules/auth/auth.module';
import { ChatHistoryModule } from './modules/chat-history/chat-history.module';
import { CompanyAnalyticsModule } from './modules/company-analytics/company-analytics.module';
import { EmailModule } from './modules/email/email.module';
import { ImageHistoryModule } from './modules/image-history/image-history.module';
import { StorageModule } from './modules/storage/storage.module';
import { SubscriptionsModule } from './modules/subscriptions/subscriptions.module';
import { UserAnalyticsModule } from './modules/user-analytics/user-analytics.module';
import { UsersModule } from './modules/users/users.module';
import { GlobalLoggerMiddleware } from './middlewares/globalLogger';
import { ChatGuardsModule } from './shared/chat-guards/chat-guards.module';
import { ImageGuardsModule } from './shared/image-guards/image-guards.module';
import { ThirdPartyModule } from './shared/third-party/third-party.module';
import { LanguageModule } from './shared/language/language.module';
import { StabilityAiModule } from './shared/third-party/services/stability.ai/stability.ai.module';
import { IvritAiModule } from './shared/third-party/services/ivrit-ai/ivrit-ai.module';
import { FeedbackModule } from './modules/feedback/feedback.module';
import { PaymentModule } from './modules/payment/payment.module';
import { FeatureRequestModule } from './modules/feature-request/feature-request.module';
import { GeneralFeedbackModule } from './modules/general-feedback/general-feedback.module';
import { PublicModule } from './modules/public/public.module';
import { FilterPromptsModule } from './modules/filter-prompts/filter-prompts.module';
import { FilterInstructionModule } from './modules/filter-instruction/filter-instruction.module';
import { FilterTestResultModule } from './modules/filter-test-result/filter-test-result.module';
import { FilterSettingModule } from './modules/filter-setting/filter-setting.module';
import { AdminModule } from './admin/admin.module';
import { AppConfigModule } from './modules/app-config/app-config.module';
import { FilterBatchModule } from './modules/filter-batch/filter-batch.module';
import { TodoModule } from './modules/todo/todo.module';
import { MigrationModule } from './modules/migration/migration.module';
import { WhatsappModule } from './modules/whatsapp/whatsapp.module';
import { WhatsappWebModule } from './modules/whatsapp-web/whatsapp-web.module';
import { Whatsapp019Module } from './modules/whatsapp-019/whatsapp-019.module';
import { AIVoiceModule } from './modules/ai-voice/ai-voice.module';
import { QuickTilesModule } from './modules/quick-tiles/quick-tiles.module';
import { DebugEventsModule } from './modules/debug-events/debug-events.module';
import { CostTrackerModule } from './modules/cost-tracker/cost-tracker.module';
import { DocumentsModule } from './modules/documents/documents.module';
import { AudioModule } from './modules/audio/audio.module';

@Module({
    imports: [
        ConfigModule.forRoot({
            envFilePath: selectEnv(),
            isGlobal: true,
            load: [envConfig],
        }),
        DatabaseModule,
        AuthModule,
        UsersModule,
        SubscriptionsModule,
        EmailModule,
        UserAnalyticsModule,
        CompanyAnalyticsModule,
        ChatHistoryModule,
        ImageHistoryModule,
        StorageModule,
        ChatGuardsModule,
        ImageGuardsModule,
        ThirdPartyModule,
        LanguageModule,
        StabilityAiModule,
        IvritAiModule,
        FeedbackModule,
        PaymentModule,
        FeatureRequestModule,
        GeneralFeedbackModule,
        PublicModule,
        AppConfigModule,
        FilterPromptsModule,
        FilterInstructionModule,
        FilterTestResultModule,
        FilterSettingModule,
        AdminModule,
        FilterBatchModule,
        TodoModule,
        MigrationModule,
        WhatsappModule,
        WhatsappWebModule,
        Whatsapp019Module,
        AIVoiceModule,
        QuickTilesModule,
        DebugEventsModule,
        CostTrackerModule,
        DocumentsModule,
        AudioModule
    ],
    controllers: [],
    providers: [Logger],
})
export class AppModule implements NestModule {
    configure(consumer: MiddlewareConsumer) {
        consumer.apply(GlobalLoggerMiddleware).forRoutes('*');
    }
}
