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

test("A terminal gains an OOM-protected scope after startup probes time out", WEB, async ({ t3, app, browser, screen }) => {
  await rm(`${T3_HOME}/probe-stalled`, { force: true });
  execFileSync("/usr/bin/systemd-run", ["--user", "--scope", "--quiet", "--property=OOMPolicy=stop", "--", "true"]);
  const project = await t3.project("scope-recovery");
  await t3.open("/settings/providers");
  await screen.getByRole("button", /Refresh provider status/).tap();
  await new Promise(resolve => setTimeout(resolve, 6000));
  const thread = await t3.thread({ project, title: "Systemd recovery", model: "showcase", messages: ["Ready for terminal recovery check"] });
  await t3.open(thread);
  await screen.getByRole("button", "Toggle terminal drawer").tap();
  await new Promise(resolve => setTimeout(resolve, 1500));
  await browser.keyboard.type("export PS1='proof> '; clear; unit=$(sed -n 's|.*/\\(t3code-terminal-[^/]*\\.scope\\).*|\\1|p' /proc/$$/cgroup); if [ -n \"$unit\" ]; then systemctl --user show \"$unit\" -p Slice -p OOMPolicy | tee scope-result.txt; else echo 'UNSCOPED: startup timeout remained cached' | tee scope-result.txt; fi");
  await browser.keyboard.press("Enter");
  await new Promise(resolve => setTimeout(resolve, 2500));
  await app.screenshot("terminal-after-systemd-recovery");
  await expect.poll(() => readFile(`${project}/scope-result.txt`, "utf8").catch(() => "")).toContain("OOMPolicy=stop");
});
