import { Module } from '@nestjs/common';

import { AppController } from './app.controller';
import { AppService } from './app.service';
import { TwilioModule } from './twilio/twilio.module';
import { ConfigModule } from '@nestjs/config';
import { SentryModule } from '@sentry/nestjs/setup';
import { SentryGlobalFilter } from '@sentry/nestjs/setup';
import { APP_FILTER } from '@nestjs/core';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { EventsGateway } from './websocket/event.websocket';
import { StreamService } from './services/stream.service';
import { TextToSpeechService } from './services/tts.service';
import { RagModule } from './rag/rag.module';
import { MongooseModule } from '@nestjs/mongoose';
import { config } from 'dotenv';
import { ModelModule } from './model/model.module';
import { VendorModule } from './vendor/vendor.module';
import { CommonModule } from './common/common.module';
import { JwtModule } from '@nestjs/jwt';
import { AuthModule } from './auth/auth.module';
import { CallModule } from './call/call.module';
import { ChatModule } from './chat/chat.module';
import { ScheduleModule } from '@nestjs/schedule';
import { CronjobModule } from './cron/cron.module';
import { UploadModule } from './upload/upload.module';
// import { StripeModule } from 'nestjs-stripe';
import { StripeModule } from './stripe/stripe.module';
import { AgentModule } from './agent/agent.module';
import { KnowledgeBaseModule } from './knowledge_base/knowledge.module';
import { AdminModule } from './admin/admin.module';
import { DashboardModule } from './dashboard/dashboard.module';
import { SubscriptionModule } from './subscription/subscription.module';
import { WebhookModule } from './webhook/webhook.module';
import { AdminAiAgentModule } from './admin_ai_agent/admin_ai_agent.module';
import { FaqModule } from './faq/faq.module';

config();
const databaseConfig = process.env.DB_URI;
const admin_sk = process.env.DB_URI;
@Module({
  imports: [
    AdminModule,
    KnowledgeBaseModule,
    AgentModule,
    UploadModule,
    CronjobModule,
    ScheduleModule.forRoot(),
    ChatModule,
    CallModule,
    VendorModule,
    AuthModule,
    CommonModule,
    ModelModule,
    MongooseModule.forRoot(databaseConfig),
    TwilioModule,
    RagModule,
    ConfigModule.forRoot({
      isGlobal: true,
      // envFilePath: '.env',
    }),
    JwtModule.register({
      global: true,
      secret: admin_sk,
      // signOptions: { expiresIn: '60s' },
    }),
    SentryModule.forRoot(),
    StripeModule,
    DashboardModule,
    SubscriptionModule,
    WebhookModule,
    AdminAiAgentModule,
    FaqModule
  ],
  controllers: [AppController],
  providers: [
    {
      provide: APP_FILTER,
      useClass: SentryGlobalFilter,
    },
    AppService,
    EventsGateway,
  ],
})
export class AppModule { }
