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

test("Completed worktree setup stays hidden when the first message is edited and resubmitted", WEB, async ({t3, app, screen, browser}) => {
  await t3.project("demo-repo", {"README.md": "# Demo repository\n"});
  await t3.open();
  await screen.getByRole("combobox", "Workspace").tap();
  await screen.getByText("New worktree", {exact: true}).tap();
  await screen.getByRole("button", "Showcase", {exact: true}).tap();
  await screen.getByRole("option", "Command output", {exact: false}).tap();
  await browser.keyboard.press("Escape");
  await screen.getByRole("textbox").fill("Show me the command output");
  await screen.getByRole("textbox").press("Enter");
  await screen.getByText("The command printed one JSON line.", {exact: true}).waitFor({state: "visible", timeout: 120000});
  await screen.getByRole("button", "Stop generation").waitFor({state: "hidden", timeout: 120000});
  await app.screenshot("first-turn-complete");
  await screen.getByRole("button", "Edit from here").tap();
  await screen.getByRole("button", "Revert and keep changes").tap();
  await screen.getByRole("dialog").waitFor({state: "hidden"});
  await browser.evaluate(() => new Promise<boolean>(resolve => {
    const ready = () => document.querySelector('[data-testid="composer-editor"]')?.textContent === "Show me the command output";
    if (ready()) return resolve(true);
    const observer = new MutationObserver(() => {if (ready()) {observer.disconnect(); resolve(true);}});
    observer.observe(document.body, {subtree: true, childList: true, characterData: true});
  }));
  await screen.getByRole("textbox").press("End");
  await screen.getByRole("textbox").pressSequentially(" again");
  await browser.evaluate(() => {
    (window as any).__setupFlashes = [];
    const observe = () => {
      const card = document.querySelector('[data-worktree-setup-phase="done"]');
      if (card && card.getBoundingClientRect().height > 0) (window as any).__setupFlashes.push({text: card.textContent, at: performance.now()});
    };
    new MutationObserver(observe).observe(document.body, {subtree:true, childList:true, attributes:true});
  });
  await screen.getByRole("textbox").press("Enter");
  await screen.getByText("Show me the command output again", {exact:true}).waitFor({state: "visible", timeout:120000});
  await app.screenshot("replacement-start");
  await screen.getByText("The command printed one JSON line.", {exact: true}).waitFor({state: "visible", timeout:120000});
  await screen.getByRole("button", "Stop generation").waitFor({state: "hidden", timeout: 120000});
  await app.screenshot("replacement-finished");
  const flashes = await browser.evaluate(() => (window as any).__setupFlashes);
  expect(flashes).toEqual([]);
});
