import { expect } from "e2e";
import { test, WEB } from "./t3.ts";

test("Files panel find focuses search and selects its query", WEB, async ({ t3, app, screen, browser }) => {
  const project = await t3.project("File search demo", { "src/alpha.ts": "export const alpha = 1;\n", "src/beta.ts": "export const beta = 2;\n" });
  await t3.thread({ project, title: "Files shortcut demonstration", messages: ["Ready"] });
  await t3.open();
  await screen.getByRole("button", "Files shortcut demonstration, Done, File search demo").tap();
  await screen.getByRole("button", "Toggle right panel").tap();
  await screen.getByRole("button", "Add panel surface").tap();
  await screen.getByRole("menuitem", "Files F").tap();
  const search = screen.getByRole("searchbox", "Search File search demo files");
  await screen.getByRole("treeitem", "src").tap();
  await browser.keyboard.press("Control+f");
  await app.screenshot("tree-shortcut-focus");
  const treeFocused = await browser.evaluate(() => document.activeElement?.getAttribute("name") === "project-files-search");
  await search.fill("alpha");
  await browser.keyboard.press("Control+f");
  await app.screenshot("query-selected");
  const selected = await browser.evaluate(() => {
    const input = document.activeElement as HTMLInputElement;
    return input.name === "project-files-search" && input.selectionStart === 0 && input.selectionEnd === 5;
  });
  await screen.getByRole("button", "Files", { exact: true }).tap();
  await browser.keyboard.press("Control+f");
  await app.screenshot("panel-command-from-tab-header");
  const panelFocused = await browser.evaluate(() => document.activeElement?.getAttribute("name") === "project-files-search");
  await screen.getByRole("treeitem", "alpha.ts").tap();
  await browser.locator('[data-line="1"]').first().waitFor();
  await screen.getByRole("button", "alpha.ts", { exact: true }).tap();
  await browser.keyboard.press("Control+f");
  await app.screenshot("file-preview-ignores-panel-find");
  const previewIgnored = await browser.evaluate(() => document.activeElement?.getAttribute("name") !== "project-files-search");
  expect(treeFocused).toBe(true);
  expect(selected).toBe(true);
  expect(panelFocused).toBe(true);
  expect(previewIgnored).toBe(true);
});
