import { Module } from "@nestjs/common"
import { ConfigModule } from "@nestjs/config"
import { TypeOrmConfigService } from "../type-orm-config.service"
import { TypeOrmModule } from "@nestjs/typeorm"
import { DataSource, DataSourceOptions } from "typeorm"
import typeorm from "../../config/typeorm"
import appConfig from "../../config/app.config"
import { AdminSeedModule } from "./admin/admin-seed.module"
import { RoleSeedModule } from "./role/role-seed.module"
import { PermissionSeedModule } from "./permission/permission-seed.module"
import { BusinessVerticalSeedModule } from "./business-verticals/business-verticals-seed.module"
import { ModuleSeedModule } from "./modules/modules-seed.module"
import { TripTypeSeedModule } from "./trip-types/trip-types-seed.modules"
import { IncidentTypeModule } from "./incident-types/incident-types-seed.module"
import { CancelReasonSeedModule } from "./cancel-reasons/cancel-reasons-seed.module"
import { LanguageSeedModule } from "./languages/languages-seed.module"
import { CountrySeedModule } from "./country/country-seed.module"
import { StateSeedModule } from "./state/state-seed.module"
import { CitySeedModule } from "./city/city-seed.module"
import { RolePermissionSeedModule } from "./role-permission/role-permission.module"

@Module({
  imports: [
    AdminSeedModule,
    RoleSeedModule,
    PermissionSeedModule,
    BusinessVerticalSeedModule,
    ModuleSeedModule,
    TripTypeSeedModule,
    IncidentTypeModule,
    CancelReasonSeedModule,
    LanguageSeedModule,
    CountrySeedModule,
    StateSeedModule,
    CitySeedModule,
    RolePermissionSeedModule,
    ConfigModule.forRoot({
      isGlobal: true,
      load: [typeorm, appConfig],
      envFilePath: [".env"],
    }),
    TypeOrmModule.forRootAsync({
      useClass: TypeOrmConfigService,
      dataSourceFactory: async (options: DataSourceOptions) => {
        return new DataSource(options).initialize()
      },
    }),
  ],
})
export class SeedModule {}
