import type { Db } from '../client'
import { seedVatRates } from './vat-rates.seed'
import { seedAIModelPricing, seedAIGlobalConfig, seedAITierQuotas } from './ai'
import { seedAdminRoles } from './admin-roles.seed'
import { seedTaxRates } from './tax-rates.seed'
import { seedOAuthClients } from './oauth-clients'

/**
 * Run all seed functions in dependency order.
 * - seedVatRates: standalone, no FK deps beyond vat_rates table
 * - seedAI*: model pricing must come before global config (FK); tenants must already exist for tier quotas
 */
export async function runAllSeeds(db: Db): Promise<void> {
  // system-i18n: VAT rate seed
  await seedVatRates(db)

  // system-ai: AI model pricing, global config singleton, tier quotas
  await seedAIModelPricing(db)
  await seedAIGlobalConfig(db)
  await seedAITierQuotas(db)

  // admin-dashboard: roles must come before tax rates (tax_rates.created_by FK refs admin_users.id)
  const superAdminId = await seedAdminRoles(db)
  await seedTaxRates(db, superAdminId)

  // wave-12: oauth-authorization-code — first-party clients
  await seedOAuthClients(db)
}
