import { BaseSeeder } from '@adonisjs/lucid/seeders'
import InternationalCity from '#models/international_city'
import MasterDataCountry from '#models/master_data_country'
import fs from 'node:fs'
import app from '@adonisjs/core/services/app'

export default class extends BaseSeeder {
  async run() {
    const filePath = app.makePath('resources/json/world_cities.json')
    const fileContent = fs.readFileSync(filePath, 'utf-8')
    const cities = JSON.parse(fileContent)

    const countries = await MasterDataCountry.all()
    const countryMap = new Map(countries.map((c) => [c.short_code, c.id]))

    const citiesToCreate: any[] = []
    // Process in chunks to avoid memory issues
    const chunkSize = 1000

    console.log(`Total cities to process: ${cities.length}`)

    for (const cityData of cities) {
      const countryId = countryMap.get(cityData.country) || null

      citiesToCreate.push({
        country_id: countryId,
        country_code: cityData.country,
        state_name: cityData.state,
        name: cityData.name,
        latitude: cityData.lat,
        longitude: cityData.lng,
        is_active: true,
      })

      if (citiesToCreate.length >= chunkSize) {
        await InternationalCity.createMany(citiesToCreate)
        citiesToCreate.length = 0 // Clear array
      }
    }

    if (citiesToCreate.length > 0) {
      await InternationalCity.createMany(citiesToCreate)
    }
  }
}
