import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';

import { AppController } from './app.controller';
import { AppService } from './app.service';

import { PaymentGatewaysModule } from './modules/payment-gateways/payment-gateways.module';
import { WebhooksModule } from './modules/webhooks/webhooks.module';

import { ActivityLogsModule } from './modules/activity-logs/activity-logs.module';
import { AgenciesModule } from './modules/agencies/agencies.module';
import { AuthModule } from './modules/auth/auth.module';
import { BookingsModule } from './modules/bookings/bookings.module';
import { CategoriesModule } from './modules/categories/categories.module';
import { CmsModule } from './modules/cms/cms.module';
import { ClientPortalModule } from './modules/client-portal/client-portal.module';
import { ContractsModule } from './modules/contracts/contracts.module';
import { CurrenciesModule } from './modules/currencies/currencies.module';
import { DashboardModule } from './modules/dashboard/dashboard.module';
import { DocumentsModule } from './modules/documents/documents.module';
import { GpsModule } from './modules/gps/gps.module';
import { InvoicesModule } from './modules/invoices/invoices.module';
import { LanguagesModule } from './modules/languages/languages.module';
import { MaintenanceModule } from './modules/maintenance/maintenance.module';
import { NotesModule } from './modules/notes/notes.module';
import { NotificationsModule } from './modules/notifications/notifications.module';
import { OptionsModule } from './modules/options/options.module';
import { PaymentsModule } from './modules/payments/payments.module';
import { PricingModule } from './modules/pricing/pricing.module';
import { SettingsModule } from './modules/settings/settings.module';
import { TaxesModule } from './modules/taxes/taxes.module';
import { UsersModule } from './modules/users/users.module';
import { VehiclesModule } from './modules/vehicles/vehicles.module';

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

    TypeOrmModule.forRoot({
      type: 'postgres',
      host: process.env.DB_HOST,
      port: Number(process.env.DB_PORT),
      username: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      autoLoadEntities: true,
      synchronize: true,
    }),

    AgenciesModule,
    CategoriesModule,
    OptionsModule,
    VehiclesModule,
    PricingModule,
    TaxesModule,
    BookingsModule,
    PaymentsModule,
    InvoicesModule,
    NotesModule,
    DashboardModule,
    CurrenciesModule,
    LanguagesModule,
    CmsModule,
    SettingsModule,
    GpsModule,
    MaintenanceModule,
    ActivityLogsModule,
    NotificationsModule,
    UsersModule,
    AuthModule,
    ContractsModule,
    DocumentsModule,
    WebhooksModule,
    PaymentGatewaysModule,
    ClientPortalModule,
  ],

  controllers: [AppController],

  providers: [AppService],
})
export class AppModule {}