import { test, expect, handleElementDialogs } from "../fixtures/persistent-context";
import {
  goToRoom,
  sendMessage,
  waitForBotReply,
  assertNoDecryptionErrors,
} from "../fixtures/matrix-room";

test.describe("assistant-bot", () => {
  test.beforeEach(async ({ page }) => {
    await page.goto("/");
    await handleElementDialogs(page);
    await goToRoom(page, "Assistant");
  });

  test("responde a un saludo en DM", async ({ page }) => {
    await sendMessage(page, "Hola, como estas?");

    const reply = await waitForBotReply(page, {
      timeout: 60_000,
      sender: "Assistant",
    });
    expect(reply).toBeTruthy();
    expect(reply.length).toBeGreaterThan(10);
  });

  test("responde a una pregunta con contenido coherente", async ({ page }) => {
    await sendMessage(page, "Que es la fotosintesis? Responde en una frase.");

    const reply = await waitForBotReply(page, {
      timeout: 60_000,
      sender: "Assistant",
    });
    expect(reply).toBeTruthy();
    expect(reply.length).toBeGreaterThan(10);
  });

  test("!help muestra lista de comandos", async ({ page }) => {
    await sendMessage(page, "!help");

    const reply = await waitForBotReply(page, {
      timeout: 10_000,
      sender: "Assistant",
    });
    expect(reply).toBeTruthy();
    expect(reply.toLowerCase()).toContain("help");
    expect(reply.toLowerCase()).toContain("ping");
  });

  test("!ping responde", async ({ page }) => {
    await sendMessage(page, "!ping");

    const reply = await waitForBotReply(page, {
      timeout: 10_000,
      sender: "Assistant",
    });
    expect(reply).toBeTruthy();
  });

  test("no hay errores de E2EE en el timeline", async ({ page }) => {
    await assertNoDecryptionErrors(page);
  });
});
