import { beforeAll, afterAll } from 'vitest'
import { prisma } from '../lib/prisma'

const delegates = [
  'billingEvent',
  'billingRefund',
  'billingCreditNote',
  'billingCreditLedgerEntry',
  'billingCreditBalance',
  'billingPaymentAttempt',
  'billingPaymentIntent',
  'billingInvoiceLineItem',
  'billingInvoice',
  'billingPaymentMethod',
  'billingAccount',
  'auditLog',
  'adminPermission',
  'adminUser',
  'damagePoint',
  'damageInspection',
  'damageReport',
  'additionalDriver',
  'reservationInsurance',
  'notificationPreference',
  'notification',
  'review',
  'rentalPayment',
  'reservation',
  'customer',
  'renterSavedCompany',
  'renter',
  'offerVehicle',
  'offer',
  'vehicleCalendarBlock',
  'vehiclePriceHistory',
  'vehiclePricingRule',
  'vehiclePricingConfiguration',
  'maintenanceLog',
  'vehicle',
  'employee',
  'pricingRule',
  'insurancePolicy',
  'accountingSettings',
  'contractSettings',
  'brandSettings',
  'subscriptionInvoice',
  'subscription',
  'company',
] as const

// Wipe all data between test files in a safe order that respects FK constraints.
async function cleanDatabase() {
  for (const delegate of delegates) {
    await (prisma as any)[delegate].deleteMany({})
  }
}

beforeAll(async () => {
  await cleanDatabase()
})

afterAll(async () => {
  await cleanDatabase()
  await prisma.$disconnect()
})
