import { Module } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { TypeOrmModule } from "@nestjs/typeorm";
import { AuthModule } from "./auth/auth.module";
import { CatalogosModule } from "./catalogos/catalogos.module";
import { ClientesModule } from "./clientes/clientes.module";
import { CotizacionesModule } from "./cotizaciones/cotizaciones.module";
import { HistorialModule } from "./historial/historial.module";
import { OtsModule } from "./ots/ots.module";
import { ProductosModule } from "./productos/productos.module";
import { SyncModule } from "./sync/sync.module";
import { VehiculosModule } from "./vehiculos/vehiculos.module";

import { AppController } from "./app.controller";

@Module({
  imports: [
    // Configuration
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: [".env", "../.env"],
    }),

    // Database
    TypeOrmModule.forRootAsync({
      imports: [ConfigModule],
      inject: [ConfigService],
      useFactory: (configService: ConfigService) => ({
        type: "mysql",
        host: configService.get("DB_HOST"),
        port: configService.get<number>("DB_PORT", 3306),
        username: configService.get("DB_USERNAME"),
        password: configService.get("DB_PASSWORD"),
        database: configService.get("DB_DATABASE"),
        entities: [__dirname + "/**/*.entity{.ts,.js}"],
        synchronize: false, // Use migrations in production
        logging: configService.get("NODE_ENV") === "development",
      }),
    }),

    // Feature Modules
    AuthModule,
    ClientesModule,
    VehiculosModule,
    OtsModule,
    CotizacionesModule,
    ProductosModule,
    CatalogosModule,
    SyncModule,
    HistorialModule,
  ],
  controllers: [AppController],
})
export class AppModule {}
