/*
Copyright 2025 New Vector Ltd.

SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
Please see LICENSE in the repository root for full details.
*/

import { expect, test } from "@playwright/test";

import { widgetTest } from "../fixtures/widget-user.ts";
import { TestHelpers } from "./test-helpers.ts";

// Skip test, including Fixtures
widgetTest.skip(
  ({ browserName }) => browserName === "firefox",
  "This test is not working on firefox, after hangup brooks is locked in a strange state with a blank widget",
);

widgetTest("Start a new call as widget", async ({ asWidget, browserName }) => {
  test.slow();

  const { brooks, whistler } = asWidget;

  await TestHelpers.startCallInCurrentRoom(brooks.page, false);

  await expect(
    brooks.page
      .locator('iframe[title="Element Call"]')
      .contentFrame()
      .getByTestId("lobby_joinCall"),
  ).toBeVisible();

  await brooks.page
    .locator('iframe[title="Element Call"]')
    .contentFrame()
    .getByTestId("lobby_joinCall")
    .click();

  // Check the join indicator on the room list
  await expect(
    brooks.page
      .locator('iframe[title="Element Call"]')
      .contentFrame()
      .getByRole("button", { name: "End call" }),
  ).toBeVisible();

  // Join from the other side
  await TestHelpers.joinCallInCurrentRoom(whistler.page);

  // Currently disabled due to recent Element Web is bypassing Lobby
  // await expect(
  //   whistler.page
  //     .locator('iframe[title="Element Call"]')
  //     .contentFrame()
  //     .getByTestId("lobby_joinCall"),
  // ).toBeVisible();
  //
  // await whistler.page
  //   .locator('iframe[title="Element Call"]')
  //   .contentFrame()
  //   .getByTestId("lobby_joinCall")
  //   .click();

  // Currrenty disabled due to recent Element Web not indicating the number of participants
  // await expect(
  //   whistler.page.locator("div").filter({ hasText: /^Joined • 2$/ }),
  // ).toBeVisible();

  // await expect(
  //   brooks.page.locator("div").filter({ hasText: /^Joined • 2$/ }),
  // ).toBeVisible();

  // Whistler leaves
  await whistler.page.waitForTimeout(1000);
  await whistler.page
    .locator('iframe[title="Element Call"]')
    .contentFrame()
    .getByTestId("incall_leave")
    .click();

  // Brooks leaves
  await brooks.page
    .locator('iframe[title="Element Call"]')
    .contentFrame()
    .getByTestId("incall_leave")
    .click({ timeout: 15000 });

  await expect(whistler.page.locator(".mx_BasicMessageComposer")).toBeVisible({
    timeout: 10000,
  });
  await expect(brooks.page.locator(".mx_BasicMessageComposer")).toBeVisible({
    timeout: 10000,
  });
});
