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 { AdminModule } from './admin/admin.module';
import { CommonModule } from './common/common.module';
import { JwtModule } from '@nestjs/jwt';
import { AuthModule } from './auth/auth.module';

config();
const databaseConfig = process.env.DB_URI;
const admin_sk = process.env.DB_URI;
@Module({
  imports: [
    AdminModule,
    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(),
  ],
  controllers: [AppController],
  providers: [
    {
      provide: APP_FILTER,
      useClass: SentryGlobalFilter,
    },
    AppService,
    EventsGateway,
  ],
})
export class AppModule {}
