import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { BotModule } from './bot/bot.module';
import { PaymentsController } from './payments/payments.controller';
import { PrismaService } from './common/services/prisma.service';
import { NowPaymentsService } from './payments/nowpayments.service';
import { PaystarService } from './payments/paystar.service';
import { AppController } from './app.controller';
import { Telegraf } from 'telegraf';
import { SecurityMiddleware } from './middleware/security.middleware';

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),
    BotModule,
  ],
  controllers: [PaymentsController, AppController],
  providers: [
    PrismaService,
    NowPaymentsService,
    PaystarService,
    {
      provide: 'TELEGRAF_BOT',
      useFactory: (configService: ConfigService) => {
        return new Telegraf(configService.get<string>('BOT_TOKEN')!);
      },
      inject: [ConfigService],
    },
  ],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(SecurityMiddleware)
      .forRoutes('*');
  }
}