/** Purge des données créées par les parcours Playwright (motifs dédiés).
 *  Appelé par le globalSetup e2e — la base locale reste propre entre les runs. */
import 'dotenv/config';
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  // R3 — d'abord les traces de gestion (les mouvements liés à un OT E2E
  // seraient orphelins après sa suppression et fausseraient les stocks seedés)
  await prisma.stockMovement.deleteMany({
    where: {
      OR: [
        { part: { designation: { contains: 'E2E' } } },
        { workOrder: { title: { contains: 'E2E' } } },
        { purchaseOrder: { supplier: { name: { contains: 'E2E' } } } },
      ],
    },
  });
  await prisma.document.deleteMany({
    where: {
      OR: [
        { fileName: { contains: 'e2e' } },
        { workOrder: { title: { contains: 'E2E' } } },
      ],
    },
  });
  await prisma.purchaseOrderLine.deleteMany({
    where: {
      OR: [
        { part: { designation: { contains: 'E2E' } } },
        { purchaseOrder: { supplier: { name: { contains: 'E2E' } } } },
      ],
    },
  });
  await prisma.purchaseOrder.deleteMany({
    where: { supplier: { name: { contains: 'E2E' } } },
  });
  await prisma.part.deleteMany({ where: { designation: { contains: 'E2E' } } });
  await prisma.partner.deleteMany({ where: { name: { contains: 'E2E' } } });

  await prisma.request.deleteMany({ where: { description: { contains: 'E2E' } } });
  await prisma.workOrder.deleteMany({ where: { title: { contains: 'E2E' } } });
  await prisma.meterReading.deleteMany({ where: { value: { gte: 90_000_000 } } });
  // Un appareil de test peut avoir reçu grilles/demandes (génération du mois) :
  // on purge ses dépendances avant lui (FK RESTRICT).
  await prisma.request.deleteMany({ where: { asset: { reference: { startsWith: 'E2E-' } } } });
  await prisma.workOrder.deleteMany({ where: { asset: { reference: { startsWith: 'E2E-' } } } });
  await prisma.asset.deleteMany({ where: { reference: { startsWith: 'E2E-' } } });
  await prisma.location.deleteMany({ where: { name: { contains: 'E2E' }, parentId: { not: null } } });
  await prisma.location.deleteMany({ where: { name: { contains: 'E2E' } } });
  await prisma.user.deleteMany({ where: { email: { startsWith: 'recrue-' } } });
}

main()
  .catch((e) => {
    console.error(e);
    process.exitCode = 1;
  })
  .finally(() => prisma.$disconnect());
