import { test } from "./helpers/test_helper";
import { expect } from "@playwright/test";

test("add prompt via deep link with base64-encoded data", async ({
  po,
  electronApp,
}) => {
  await po.setUp();
  await po.navigation.goToLibraryTab();

  // Verify library is empty initially
  await expect(po.page.getByTestId("library-prompt-card")).not.toBeVisible();

  // Create the prompt data to be encoded
  const promptData = {
    title: "Deep Link Test Prompt",
    description: "A prompt created via deep link",
    content: "You are a helpful assistant. Please help with:\n\n[task here]",
  };

  // Encode the data as base64 (matching the pattern in main.ts)
  const base64Data = Buffer.from(JSON.stringify(promptData)).toString("base64");
  const deepLinkUrl = `dyad://add-prompt?data=${encodeURIComponent(base64Data)}`;

  console.log("Triggering deep link:", deepLinkUrl);

  // Trigger the deep link by emitting the 'open-url' event in the main process
  await electronApp.evaluate(({ app }, url) => {
    app.emit("open-url", { preventDefault: () => {} }, url);
  }, deepLinkUrl);

  // Wait for the dialog to open and verify prefilled data
  await expect(
    po.page.getByRole("dialog").getByText("Create New Prompt"),
  ).toBeVisible();

  // Verify the form is prefilled with the correct data
  await expect(po.page.getByRole("textbox", { name: "Title" })).toHaveValue(
    promptData.title,
  );
  await expect(
    po.page.getByRole("textbox", { name: "Description (optional)" }),
  ).toHaveValue(promptData.description);
  await expect(po.page.getByRole("textbox", { name: "Content" })).toHaveValue(
    promptData.content,
  );

  // Save the prompt
  await po.page.getByRole("button", { name: "Save" }).click();

  await expect(
    po.page.getByTestId("library-prompt-card"),
  ).toMatchAriaSnapshot();
});
