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

/**
 * Suche & Eintreffzeit-Sortierung (Definition of Done #6, Plan WS11 Aufgabe 7 /
 * Verifikation 7).
 *
 * NICHT in der Sandbox ausführbar (kein Server/DB/OSRM) — deferred. Wird über
 * `npm run test:e2e` gegen einen geseedeten Server mit authentifizierter
 * Session ausgeführt.
 *
 * Garantien:
 *  - Dynamische Filter (UND-verknüpft) liefern korrekte Teilmengen.
 *  - Treffer sind nach ETA aufsteigend sortiert.
 *  - OSRM-Ausfall (E2E_FORCE_HAVERSINE=1) -> sichtbarer "Luftlinie"-Fallback.
 */
test.skip(
  !process.env.E2E_AUTH_STATE && !process.env.E2E_WEHR_READ_STATE,
  "benötigt authentifizierte Session (Auth-Setup)",
);
test.use({
  storageState:
    process.env.E2E_AUTH_STATE ?? process.env.E2E_WEHR_READ_STATE ?? undefined,
});

test("Filter grenzt Treffer ein (UND-Verknüpfung)", async ({ page }) => {
  await page.goto("/fahrzeuge");
  const before = await page.getByText(/Treffer/).first().innerText();
  await page.getByLabel("Nur einsatzbereit").click();
  await expect(page).toHaveURL(/bereit=1/);
  const after = await page.getByText(/Treffer/).first().innerText();
  // Teilmenge: Anzahl sinkt nicht und Filter ist in der URL aktiv.
  expect(after).not.toBe(before);
});

test("Treffer mit Standort sind aufsteigend nach ETA sortiert", async ({
  page,
}) => {
  await page.goto("/fahrzeuge?ort=St.+P%C3%B6lten");
  await page.waitForLoadState("networkidle");
  const etaTexts = await page
    .locator("[data-testid='eta-minutes']")
    .allInnerTexts();
  const minutes = etaTexts.map((t) => parseInt(t.replace(/\D/g, ""), 10));
  const sorted = [...minutes].sort((a, b) => a - b);
  expect(minutes).toEqual(sorted);
});

test("OSRM-Ausfall zeigt Luftlinie-Fallback", async ({ page }) => {
  test.skip(
    process.env.E2E_FORCE_HAVERSINE !== "1",
    "nur mit E2E_FORCE_HAVERSINE=1",
  );
  await page.goto("/fahrzeuge?ort=St.+P%C3%B6lten");
  await expect(page.getByText(/Luftlinie/i).first()).toBeVisible();
});
