import { readFile } from "node:fs/promises";
import { setTimeout as delay } from "node:timers/promises";
import { expect } from "e2e";
import { test, WEB } from "./t3.ts";

test("Project browser settings preserve the global search engine", WEB, async ({ t3, app, screen }) => {
  const capture = async (label: string) => {
    for (let attempt = 0; attempt < 10; attempt++) {
      const first = await app.screenshot(`${label}-stability-${attempt}`);
      await delay(500);
      const second = await app.screenshot(`${label}-stable-${attempt}`);
      if ((await readFile(first)).equals(await readFile(second))) {
        await app.screenshot(label);
        return;
      }
    }
    throw new Error(`Capture did not settle: ${label}`);
  };
  await t3.project("demo");
  await t3.project("project-a");
  await t3.open();
  await screen.getByRole("button", "Add project").waitFor();
  await app.open("/settings/browser");
  const engine = screen.getByRole("combobox", "Search engine");
  await engine.tap();
  await screen.getByRole("option", "DuckDuckGo").tap();
  await capture("global-before");
  await screen.getByRole("button", "Project scope: All projects").tap();
  await screen.getByRole("menuitemradio", "project-a").tap();
  // Attempt the same edit when the UI permits it; a refused edit must preserve the default.
  if (await engine.isEnabled()) {
    await engine.tap();
    await screen.getByRole("option", "Google", { exact: true }).tap();
  }
  await capture("project-scope");
  await screen.getByRole("button", "Project scope: project-a").tap();
  await screen.getByRole("menuitemradio", "All projects").tap();
  await capture("global-after");
  await expect(engine).toHaveText("DuckDuckGo");
});
