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

test("Unbracketed terminal paste preserves a leading U+FEFF", WEB, async ({ t3, app, screen, browser }) => {
  const project = await t3.project("paste-demo");
  await t3.thread({ project, title: "Terminal paste", messages: ["Start"] });
  await t3.open();
  await browser.evaluate(() => { (document.querySelector('[data-testid="sidebar-row-card"]') as HTMLElement).click(); });
  await browser.keyboard.press("Control+j");
  await screen.getByRole("textbox", "Terminal input").tap();
  await browser.keyboard.type("PS1='$ '; clear; printf 'Unbracketed paste: leading BOM then embedded BOM control\\nExpected leading bytes: 357 273 277\\n'; od -c | tee paste-output.txt");
  await browser.keyboard.press("Enter");
  await app.screenshot("od-ready");
  await browser.evaluate(() => {
    const input = document.querySelector('textarea[aria-label="Terminal input"]');
    if (!input) throw new Error("Terminal input missing");
    for (const text of ["\ufeffsample\n", "a\ufeffsample\n"]) {
      const data = new DataTransfer();
      data.setData("text/plain", text);
      input.dispatchEvent(new ClipboardEvent("paste", { clipboardData: data, bubbles: true, cancelable: true }));
    }
  });
  await browser.keyboard.press("Control+d");
  await app.screenshot("paste-bytes");
  await expect.poll(async () => {
    const output = await readFile(`${project}/paste-output.txt`, "utf8").catch(() => "");
    return /0000000\s+357\s+273\s+277\s+s\s+a\s+m\s+p\s+l\s+e/.test(output);
  }).toBe(true);
});
