import { test, testSkipIfWindows } from "./helpers/test_helper";

// Skipping because snapshotting the security findings table is not
// consistent across platforms because different amounts of text
// get ellipsis'd out.
testSkipIfWindows("security review", async ({ po }) => {
  await po.setUp({ autoApprove: true });
  await po.sendPrompt("tc=1");

  await po.selectPreviewMode("security");

  await po.clickRunSecurityReview();
  await po.snapshotServerDump("all-messages");
  await po.snapshotSecurityFindingsTable();

  await po.page.getByRole("button", { name: "Fix Issue" }).first().click();
  await po.waitForChatCompletion();
  await po.snapshotMessages();
});

testSkipIfWindows(
  "security review - edit and use knowledge",
  async ({ po }) => {
    await po.setUp({ autoApprove: true });
    await po.sendPrompt("tc=1");

    await po.selectPreviewMode("security");
    await po.page.getByRole("button", { name: "Edit Security Rules" }).click();
    await po.page
      .getByRole("textbox", { name: "# SECURITY_RULES.md\\n\\" })
      .click();
    await po.page
      .getByRole("textbox", { name: "# SECURITY_RULES.md\\n\\" })
      .fill("testing\nrules123");
    await po.page.getByRole("button", { name: "Save" }).click();

    await po.clickRunSecurityReview();
    await po.snapshotServerDump("all-messages");
  },
);

test("security review - multi-select and fix issues", async ({ po }) => {
  await po.setUp({ autoApprove: true });
  await po.sendPrompt("tc=1");

  await po.selectPreviewMode("security");

  await po.page
    .getByRole("button", { name: "Run Security Review" })
    .first()
    .click();
  await po.waitForChatCompletion();

  // Select the first two issues using individual checkboxes
  const checkboxes = po.page.getByRole("checkbox");
  // Skip the first checkbox (select all)
  await checkboxes.nth(1).click();
  await checkboxes.nth(2).click();

  // Wait for the "Fix X Issues" button to appear
  const fixSelectedButton = po.page.getByRole("button", {
    name: "Fix 2 Issues",
  });
  await fixSelectedButton.waitFor({ state: "visible" });

  // Click the fix selected button
  await fixSelectedButton.click();
  await po.waitForChatCompletion();
  await po.snapshotMessages();
});
