import { NestFactory } from "@nestjs/core"
import { SeedModule } from "./seed.module"
import { AdminSeedService } from "./admin/admin-seed.service"
import { RoleSeedService } from "./role/role-seed.service"
import { PermissionSeedService } from "./permission/permission.seed.service"
import { BusinessVerticalSeedService } from "./business-verticals/business-verticals-seed.service"
import { ModuleSeedService } from "./modules/modules-seed.service"
import { TripTypeSeedService } from "./trip-types/trip-types-seed.service"
import { IncidentTypeSeedService } from "./incident-types/incident-types-seed.service"
import { CancelReasonSeedService } from "./cancel-reasons/cancel-reasons-seed.service"
import { LanguageSeedService } from "./languages/languages-seed.service"
import { CountrySeedService } from "./country/country-seed.service"
import { StateSeedService } from "./state/state-seed.service"
import { CitySeedService } from "./city/city-seed.service"
import { RolePermissionSeedService } from "./role-permission/role-permission.service"

const runSeed = async () => {
  const app = await NestFactory.create(SeedModule)

  console.log("Start:: seeding database....")

  const enableCitySeeder =
    process.env.ENABLE_CITY_SEEDER?.toLowerCase() === "true"

  // run
  await app.get(RoleSeedService).run()
  await app.get(AdminSeedService).run()
  await app.get(PermissionSeedService).run()
  await app.get(BusinessVerticalSeedService).run()
  await app.get(ModuleSeedService).run()
  await app.get(TripTypeSeedService).run()
  await app.get(IncidentTypeSeedService).run()
  await app.get(CancelReasonSeedService).run()
  await app.get(LanguageSeedService).run()
  await app.get(RolePermissionSeedService).run()

  if (enableCitySeeder) {
    console.log(
      "🌍 Location seeder enabled. Running country/state/city seeding...",
    )
    await app.get(CountrySeedService).run()
    await app.get(StateSeedService).run()
    await app.get(CitySeedService).run()
  } else {
    console.log(
      "⏩ Skipping Country/State/City seeding (ENABLE_CITY_SEEDER=false)",
    )
  }
  console.log("End:: seeding database....")

  await app.close()
}

void runSeed()
