import { execSync } from "node:child_process";

/**
 * Playwright Global-Setup (Definition of Done #1, Plan WS11 Aufgabe 2).
 *
 * NICHT in der Sandbox ausführbar (kein Postgres) — deferred. Läuft im CI/lokal
 * gegen eine erreichbare DB:
 *  1. Migrationen anwenden (idempotent).
 *  2. Deterministischen Seed laden (Katalog) + Test-Fixtures (Wehren A/B mit
 *     Koordinaten, je Fahrzeug/Gerät mit festen UUIDs, vier Benutzer mit
 *     argon2id-Test-Passwort).
 *
 * Wird nur ausgeführt, wenn KEIN externer E2E_BASE_URL gesetzt ist (dann ist die
 * Ziel-Umgebung bereits provisioniert) und DATABASE_URL existiert.
 */
async function globalSetup(): Promise<void> {
  if (process.env.E2E_BASE_URL) {
    // Externe Umgebung: bereits provisioniert, nichts tun.
    return;
  }
  if (!process.env.DATABASE_URL) {
    console.warn(
      "[global-setup] DATABASE_URL fehlt — Migration/Seed übersprungen (deferred).",
    );
    return;
  }
  const run = (cmd: string) =>
    execSync(cmd, { stdio: "inherit", env: process.env });

  run("npm run db:migrate");
  run("npm run db:seed");
  // Deterministische E2E-Fixtures (vier Konten + Wehren A/B + feste Asset-UUIDs).
  run("npm run db:seed-auth");
}

export default globalSetup;
