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

test("Undo settle restores manual and automatic Active placement", WEB, async ({t3, app, screen, browser}) => {
 const project = await t3.project("Position demo");
 await t3.thread({project, title:"Gamma", messages:["Gamma work"]});
 await t3.thread({project, title:"Beta", messages:["Beta work"]});
 const alpha = await t3.thread({project, title:"Alpha", messages:["Alpha work"]});
 await t3.open("/settings/general");
 await screen.getByRole("switch", "Working section").tap();
 await t3.open(alpha);
 const row = (title:string) => browser.locator('[data-thread-item]').filter({hasText:title});
 const order = () => browser.evaluate(() => Array.from(document.querySelectorAll('[data-thread-item]')).map(e=>e.textContent?.match(/Alpha|Beta|Gamma/)?.[0]).filter(Boolean));
 await row("Alpha").waitFor();
 await row("Alpha").dragTo(row("Beta"));
 await app.screenshot("manual-before-settle");
 const manualBefore = await order();
 await row("Alpha").hover();
 await row("Alpha").getByRole("button", "Settle thread").tap();
 await screen.getByRole("button", /to undo/).tap();
 await row("Alpha").getByRole("button", "Settle thread").waitFor();
 await app.screenshot("manual-after-undo");
 await browser.reload();
 await row("Alpha").waitFor();
 await app.screenshot("manual-after-reload");
 const manualAfter = await order();
 // A separate fresh trio has no manual placement keys.
 await t3.thread({project, title:"Delta", messages:["Delta work"]});
 const epsilon = await t3.thread({project, title:"Epsilon", messages:["Epsilon work"]});
 await t3.thread({project, title:"Zeta", messages:["Zeta work"]});
 await t3.open(epsilon);
 await row("Epsilon").waitFor();
 const autoOrder = () => browser.evaluate(() => Array.from(document.querySelectorAll('[data-thread-item]')).map(e=>e.textContent?.match(/Delta|Epsilon|Zeta/)?.[0]).filter(Boolean));
 const automaticBefore = await autoOrder();
 await app.screenshot("automatic-before-settle");
 await row("Epsilon").hover();
 await row("Epsilon").getByRole("button", "Settle thread").tap();
 await screen.getByRole("button", /to undo/).tap();
 await row("Epsilon").getByRole("button", "Settle thread").waitFor();
 await app.screenshot("automatic-after-undo");
 await browser.reload();
 await row("Epsilon").waitFor();
 await app.screenshot("automatic-after-reload");
 const automaticAfter = await autoOrder();
 expect({manual:manualBefore, restoredManual:manualAfter, automatic:automaticAfter}).toEqual({manual:["Beta","Alpha","Gamma"], restoredManual:["Beta","Alpha","Gamma"], automatic:automaticBefore});
});
