import { execFileSync } from "node:child_process";
import { expect } from "e2e";
import { test, WEB } from "./t3.ts";

test("A second origin URL preserves the branch pull request", WEB, async ({ t3, app, screen }) => {
  const seed = async (title: string, secondUrl: boolean) => {
    const project = await t3.project(title);
    const git = (...args: string[]) => execFileSync("git", args, { cwd: project, encoding: "utf8" });
    git("checkout", "-b", "fix/preview-hidden-viewport-v2");
    git("remote", "add", "origin", "https://github.com/pingdotgg/t3code.git");
    git("update-ref", "refs/remotes/origin/fix/preview-hidden-viewport-v2", "HEAD");
    git("config", "branch.fix/preview-hidden-viewport-v2.remote", "origin");
    git("config", "branch.fix/preview-hidden-viewport-v2.merge", "refs/heads/fix/preview-hidden-viewport-v2");
    if (secondUrl) git("remote", "set-url", "--add", "origin", "git@gitlab.com:mirror-owner/t3code.git");
    return t3.thread({ project, title, messages: ["Confirm the repository is ready."] });
  };
  const control = await seed("Control - one origin URL", false);
  const reproduction = await seed("Reproduction - two origin URLs", true);
  await t3.open(control);
  await screen.getByText("#8469", { exact: false }).first().waitFor({ state: "visible", timeout: 60_000 });
  await screen.getByText("Syncing messages...", { exact: false }).waitFor({ state: "hidden" });
  await screen.getByRole("button", /^(Resolve|Merge)/).first().waitFor({ state: "visible", timeout: 60_000 });
  await app.screenshot("control-one-url");
  await t3.open(reproduction);
  await screen.getByRole("textbox").first().waitFor({ state: "visible" });
  await screen.getByText("Syncing messages...", { exact: false }).waitFor({ state: "hidden" });
  try {
    await expect(screen.getByText("#8469", { exact: false }).first()).toBeVisible({ timeout: 60_000 });
    await screen.getByRole("button", /^(Resolve|Merge)/).first().waitFor({ state: "visible", timeout: 60_000 });
  } finally {
    await app.screenshot("branch-pr-with-second-origin-url");
  }
});
