import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { PrismaModule } from './database/prisma/prisma.module';
import { UsersModule } from './models/users/modules/user.module';
import { AuthModule } from './models/users/modules/auth.module';
import { EventEmitterModule } from '@nestjs/event-emitter';
import { AuthGuard } from './models/users/guards/auth.guard';
import { CustomerModule } from './models/shootings/modules/customer.module';
import { ShootingModule } from './models/shootings/modules/shooting.module';
import { MulterModule } from './modules/multer/multer.module';
import { LoggerService } from './services/logger.service';
import { AllExceptionsFilter } from './filters/exception.filter';
import { APP_FILTER } from '@nestjs/core';
import { ScheduleModule } from '@nestjs/schedule';
import { HealthModule } from './modules/health/health.module';
import { MonitoringModule } from './modules/monitoring/monitoring.module';
import { EmailModule } from './modules/emails/modules/email.module';

@Module({
  imports: [
    PrismaModule,
    UsersModule,
    AuthModule,
    CustomerModule,
    ShootingModule,
    EmailModule,
    MulterModule,
    EventEmitterModule.forRoot(),
    ScheduleModule.forRoot(),
    HealthModule,
    MonitoringModule,
  ],
  controllers: [AppController],
  providers: [
    {
      provide: 'APP_GUARD',
      useClass: AuthGuard,
    },
    {
      provide: APP_FILTER,
      useClass: AllExceptionsFilter,
    },
    LoggerService,
    AppService,
  ],
})
export class AppModule {}
