import { APP_GUARD, APP_INTERCEPTOR } from "@nestjs/core";
import { Module } from "@nestjs/common";
import { ConfigModule } from "@nestjs/config";
import { ThrottlerModule, ThrottlerGuard } from "@nestjs/throttler";
import { PrismaModule } from "./infra/prisma/prisma.module";
import { AuthModule } from "./modules/auth/auth.module";
import { DashboardModule } from "./modules/dashboard/dashboard.module";
import { CustomersModule } from "./modules/customers/customers.module";
import { EquipmentModule } from "./modules/equipment/equipment.module";
import { RentalsModule } from "./modules/rentals/rentals.module";
import { CategoriesModule } from "./modules/categories/categories.module";
import { FinanceModule } from "./modules/finance/finance.module";
import { ContractsModule } from "./modules/contracts/contracts.module";
import { ReservationsModule } from "./modules/reservations/reservations.module";
import { ScheduleModule } from "./modules/schedule/schedule.module";
import { MaintenanceModule } from "./modules/maintenance/maintenance.module";
import { SuppliersModule } from "./modules/suppliers/suppliers.module";
import { ReportsModule } from "./modules/reports/reports.module";
import { SaaSAdminModule } from "./modules/saas-admin/saas-admin.module";
import { SecurityInterceptor } from "./common/interceptors/security.interceptor";
import { ResponseSanitizerInterceptor } from "./common/interceptors/response-sanitizer.interceptor";

@Module({
  imports: [
    ConfigModule.forRoot({ isGlobal: true }),

    // ─── 🛡️ Global Rate Limiting (100 req/min per IP in prod, 10000 in dev) ────
    ThrottlerModule.forRoot([
      {
        name: "global",
        ttl: 60000, // 1 minute window (ms)
        limit: process.env.NODE_ENV === "production" ? 100 : 10000,
      },
    ]),

    PrismaModule,
    AuthModule,
    DashboardModule,
    CustomersModule,
    EquipmentModule,
    CategoriesModule,
    RentalsModule,
    ReservationsModule,
    ContractsModule,
    ScheduleModule,
    FinanceModule,
    MaintenanceModule,
    SuppliersModule,
    ReportsModule,
    SaaSAdminModule,
  ],
  providers: [
    // ─── 🛡️ Apply global rate limit guard to ALL routes ────────────────────────
    {
      provide: APP_GUARD,
      useClass: ThrottlerGuard,
    },
    // ─── 📋 Security audit interceptor ─────────────────────────────────────────
    {
      provide: APP_INTERCEPTOR,
      useClass: SecurityInterceptor,
    },
    // ─── 🔒 Strip sensitive fields from all responses ──────────────────────────
    {
      provide: APP_INTERCEPTOR,
      useClass: ResponseSanitizerInterceptor,
    },
  ],
})
export class AppModule {}
