import { test, expect } from "@playwright/test";

/**
 * Scoping & Gating des Wehr-Bereichs (Workstream 7, Querschnittsstandard 1–3,
 * default-deny dreifach).
 *
 * NICHT in der Sandbox ausführbar (kein Server/DB) — deferred. Erwartet:
 *  - anonym: jede /verwaltung/*-Seite -> Redirect auf /login.
 *  - wehr_read: jede /verwaltung/*-Seite -> 403 (forbidden()).
 *  - wehr_admin: erreichbar; fremdes Fahrzeug/Gerät -> 404 (notFound).
 *
 * Negativ-Probe: Entfernen von `requireWehrAdmin()` aus (app)/verwaltung/
 * layout.tsx ODER aus einer Server-Action muss diese Suite rot machen.
 */

const VERWALTUNG_PAGES = [
  "/verwaltung/profil",
  "/verwaltung/fahrzeuge",
  "/verwaltung/fahrzeuge/neu",
  "/verwaltung/geraete",
  "/verwaltung/geraete/neu",
  "/verwaltung/benutzer",
];

test.describe("Verwaltung: anonym -> Redirect auf /login", () => {
  test.use({ storageState: { cookies: [], origins: [] } });
  for (const path of VERWALTUNG_PAGES) {
    test(`anonymer Aufruf von ${path} leitet auf /login um`, async ({
      page,
    }) => {
      await page.goto(path);
      await expect(page).toHaveURL(/\/login/);
    });
  }
});

test.describe("Verwaltung: wehr_read -> 403", () => {
  test.skip(
    !process.env.E2E_WEHR_READ_STATE,
    "benötigt wehr_read-Fixture (Test-Workstream)",
  );
  test.use({
    storageState: process.env.E2E_WEHR_READ_STATE ?? { cookies: [], origins: [] },
  });
  for (const path of VERWALTUNG_PAGES) {
    test(`wehr_read-Aufruf von ${path} -> 403`, async ({ page }) => {
      const res = await page.goto(path);
      expect(res?.status()).toBe(403);
    });
  }
});

test.describe("Verwaltung: fremde Wehr -> 404 (Scoping)", () => {
  test.skip(
    !process.env.E2E_WEHR_ADMIN_STATE || !process.env.E2E_FOREIGN_VEHICLE_ID,
    "benötigt wehr_admin-Fixture + fremde Fahrzeug-ID (Test-Workstream)",
  );
  test.use({
    storageState: process.env.E2E_WEHR_ADMIN_STATE ?? { cookies: [], origins: [] },
  });
  test("Aufruf eines fremden Fahrzeugs liefert 404", async ({ page }) => {
    const res = await page.goto(
      `/verwaltung/fahrzeuge/${process.env.E2E_FOREIGN_VEHICLE_ID}`,
    );
    expect(res?.status()).toBe(404);
  });
});
