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

test("Undo settle restores pinned and snoozed placement", WEB, async ({t3, app, screen, browser}) => {
 const project = await t3.project("Restoration demo");
 const alpha = await t3.thread({project, title:"Alpha", messages:["Alpha work"]});
 await t3.thread({project, title:"Beta", messages:["Beta work"]});
 await t3.thread({project, title:"Gamma", messages:["Gamma 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});
 await row("Alpha").waitFor();
 await row("Alpha").dragTo(row("Beta"));
 await row("Alpha").secondaryTap();
 await screen.getByText("Pin thread", {exact:true}).tap();
 await app.screenshot("pinned-before-settle");
 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 browser.reload();
 await row("Alpha").waitFor();
 await app.screenshot("pinned-after-undo");
 await row("Alpha").secondaryTap();
 await screen.getByText("Unpin thread", {exact:true}).tap();
 await row("Alpha").dragTo(row("Beta"));
 const activeOrder = () => browser.evaluate(() => Array.from(document.querySelectorAll("[data-thread-item]")).map(e=>e.textContent?.match(/Alpha|Beta|Gamma/)?.[0]).filter(Boolean));
 const beforeSnooze = await activeOrder();
 await row("Alpha").hover();
 await row("Alpha").getByRole("button", "Snooze thread").tap();
 await screen.getByText("This evening", {exact:false}).tap();
 await screen.getByRole("button", /^Snoozed/).tap();
 await row("Alpha").waitFor();
 await app.screenshot("snoozed-before-settle");
 await row("Alpha").secondaryTap();
 await screen.getByText("Settle thread", {exact:true}).tap();
 await screen.getByRole("button", /to undo/).tap();
 await row("Alpha").waitFor();
 await app.screenshot("snoozed-after-undo");
 await browser.reload();
 await row("Alpha").waitFor();
 await app.screenshot("snoozed-after-reload");
 await row("Alpha").secondaryTap();
 await screen.getByText("Wake thread", {exact:true}).tap();
 await browser.reload();
 await row("Alpha").waitFor();
 await app.screenshot("manual-position-after-wake");
 expect(await activeOrder()).toEqual(beforeSnooze);
});
