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

test("ACP tool updates clear explicit nulls and replace input", WEB, async ({t3, app, screen, browser}) => {
  const project = await t3.project("ACP proof");
  const cases = ["input-visible", "replacement-visible", "title-visible", "replacement", "clear", "omitted", "input", "content", "title", "kind", "name", "meta", "status"];
  for (const model of cases) {
    await t3.thread({project,title:`Case ${model}`,messages:[`Apply ${model} update`],model});
  }
  await t3.open();
  const results: Record<string,string> = {};
  for (const model of cases) {
    await screen.getByRole("button", new RegExp(`^Case ${model},`)).tap();
    await screen.getByText(`${model} update applied.`,{exact:true}).textContent();
    await screen.getByText("Syncing messages...", {exact:true}).waitFor({state:"hidden"});
    await screen.getByRole("button", /^Worked for/).tap();
    await browser.locator("[data-work-entry-id]").first().waitFor({state:"visible"});
    const expandable = browser.locator('[data-work-entry-id][aria-expanded="false"]');
    if (await expandable.count()) await expandable.first().tap();
    await screen.getByText("Loading output…", {exact:true}).waitFor({state:"hidden"});
    // Each field has its own thread and separately captured final state.
    await app.screenshot(`protocol-${process.env.ACP_PROOF_VERSION ?? "2"}-${model}`);
    results[model] = await browser.evaluate(() => document.querySelector('[aria-label="Conversation"]')?.textContent ?? document.body.innerText);
    console.log(JSON.stringify({model,text:results[model]}));
  }
  expect(results["replacement-visible"]).not.toContain("obsolete");
  expect(results["replacement-visible"]).toContain("new.txt");
  expect(results.replacement).toContain("new.txt");
  expect(results.clear).not.toContain("old.txt");
  expect(results.clear).not.toContain("OLD OUTPUT");
  expect(results["input-visible"]).not.toContain("obsolete");
  expect(results.content).not.toContain("OLD OUTPUT");
  expect(results["title-visible"]).not.toContain("Original title");
  expect(results.omitted).toContain("old.txt");
  expect(results.omitted).toContain("OLD OUTPUT");
});
