import { test, expect } from "@playwright/test";
import { assertNoDecryptionErrors } from "../fixtures/matrix-room";

test.describe("Login y sesion E2EE", () => {
  test("storageState cargado — rooms visibles en sidebar", async ({
    page,
  }) => {
    await page.goto("/");

    // Si la sesion esta cacheada, Element debe mostrar rooms directamente
    await expect(
      page.locator('[role="tree"][aria-label="Rooms"]')
    ).toBeVisible({ timeout: 30_000 });
  });

  test("no hay mensajes Unable to decrypt en rooms recientes", async ({
    page,
  }) => {
    await page.goto("/");

    // Esperar a que cargue la lista de rooms
    await expect(
      page.locator('[role="tree"][aria-label="Rooms"]')
    ).toBeVisible({ timeout: 30_000 });

    // Abrir el primer room visible para verificar mensajes
    const firstRoom = page
      .locator('[role="treeitem"]')
      .first();
    const roomCount = await firstRoom.count();

    if (roomCount > 0) {
      await firstRoom.click();

      // Esperar a que cargue el timeline
      await page.waitForTimeout(3_000);

      // Verificar que no hay errores de desencriptado
      await assertNoDecryptionErrors(page);
    }
  });

  test("helpers de room navegan correctamente", async ({ page }) => {
    await page.goto("/");

    // Esperar a que la sesion este lista
    await expect(
      page.locator('[role="tree"][aria-label="Rooms"]')
    ).toBeVisible({ timeout: 30_000 });

    // Verificar que hay al menos un room en el sidebar
    const rooms = page.locator('[role="treeitem"]');
    const roomCount = await rooms.count();
    expect(roomCount).toBeGreaterThan(0);
  });
});
