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

test("Unknown inherited qualifier values remain PR search text", WEB, async ({ t3, app, screen, browser }) => {
  await t3.project("PR search demo", { ".git/config": '[remote "origin"]\nurl = https://github.com/pingdotgg/t3code.git\nfetch = +refs/heads/*:refs/remotes/origin/*\n' });
  await browser.addInitScript(() => {
    (window as any).prRequests = [];
    const send = WebSocket.prototype.send;
    WebSocket.prototype.send = function (data) {
      if (typeof data === "string") {
        for (const line of data.split("\n")) {
          try { const frame = JSON.parse(line); if (frame.tag === "pullRequests.list") (window as any).prRequests.push(frame.payload); } catch {}
        }
      }
      return send.call(this, data);
    };
  });
  await t3.open("/pull-requests");
  const search = screen.getByRole("searchbox", "Search pull requests");
  await screen.getByText("pingdotgg/t3code", { exact: false }).first().waitFor({ state: "visible", timeout: 60000 });
  const queries = ["fix review:approved", "fix review:constructor", "fix", "fix checks:__proto__", "fix status:constructor", "fix review:bogus"];
  const observations = [];
  for (const query of queries) {
    await search.fill(query);
    await browser.keyboard.press("Enter");
    const observation = await browser.evaluate(async ({ query, url }) => {
      await new Promise((resolve) => setTimeout(resolve, 1000));
      const { parsePullRequestQuery } = await import(/* @vite-ignore */ url);
      const parsed = parsePullRequestQuery(query);
      const filters = Object.fromEntries(Object.entries(parsed.filters).map(([key, value]) => [key, typeof value === "function" ? "[inherited function]" : typeof value === "object" ? "[inherited object]" : value]));
      return { typed: query, text: parsed.text, filters, request: (window as any).prRequests.at(-1) ?? null };
    }, { query, url: `/@fs${APP_DIR}/packages/client-runtime/src/pullRequestQuery.ts` });
    observations.push(observation);
  }
  await browser.evaluate((observations) => {
    const panel = document.createElement("section");
    panel.setAttribute("aria-label", "Observed parser output");
    panel.style.cssText = "position:fixed;bottom:24px;left:280px;right:24px;z-index:99999;background:#111827;color:#f9fafb;padding:20px;border:2px solid #94a3b8;border-radius:8px;font:14px/1.8 monospace;white-space:pre-wrap";
    panel.textContent = "READ-ONLY OBSERVATION · page's loaded parsePullRequestQuery\n" + observations.map((item) => `${item.typed}\n  text=${JSON.stringify(item.text)}  filters=${JSON.stringify(item.filters)}  last sent=${JSON.stringify(item.request && { query: item.request.query, filters: item.request.filters })}`).join("\n");
    document.body.append(panel);
  }, observations);
  await app.screenshot("inherited-qualifier-values");
  expect(observations.map(({ request, ...item }) => item).filter((item) => ["fix review:constructor", "fix checks:__proto__", "fix status:constructor"].includes(item.typed))).toEqual([
    { typed: "fix review:constructor", text: "fix review:constructor", filters: {} },
    { typed: "fix checks:__proto__", text: "fix checks:__proto__", filters: {} },
    { typed: "fix status:constructor", text: "fix status:constructor", filters: {} },
  ]);
});
