import { Page } from "@playwright/test";
import { test, expect, ACCOUNT } from "../../../src/fixture/base-test";
import { TIMEOUT } from "../../../src/constant/timeout";
import { PW } from "../../../src/utils/PW";

const BASE_URL = process.env.BASE_URL!;

const runTest = async (page: Page) => {
  const pw = new PW(page);
  const errors: string[] = [];
  const testId = "pp-multi-usersRightOwner";
  let currentUserName = "";

  await test.step("1. Truy cập màn hình Kho tài liệu", async () => {
    await page.goto(`${BASE_URL}/hoso-quan-ly`);
  });
  await test.step("2. Lấy tên người dùng hiện tại và chọn nút Tạo mới", async () => {
    await pw.isVisible("btn-create-hstl", TIMEOUT.PAGE_LOADING);
    await pw.getElement("avatar-image").hover();
    currentUserName = await page
      .locator(".menuUser .infoUser .fullName")
      .innerText();
    await pw.clickButton("btn-create-hstl");
  });

  // TC 1.1.2.60: [Quyền Owner] Kiểm tra giá trị mặc định
  await test.step("1.1.2.60 - [Quyền Owner] Kiểm tra giá trị mặc định", async () => {
    try {
      await expect(page.getByTestId(testId).getByTestId("avatar-container"), {
        message:
          "Lỗi: Giá trị mặc định [Quyền Owner] phải là user đang đăng nhập",
      }).toContainText(currentUserName, { timeout: TIMEOUT.CONTROL_LOADING });
    } catch (e) {
      errors.push(`[1.1.2.60] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.63: [Quyền Owner] Khả năng chọn nhiều user/group
  await test.step("1.1.2.63 - [Quyền Owner] Khả năng chọn nhiều user/group", async () => {
    try {
      await pw.inputPeoplePicker(testId, "ecm05");
      await expect(page.getByTestId(testId).locator(".ant-tag"), {
        message: "Lỗi: Sau khi thêm phải có 2 tag trong [Quyền Owner]",
      }).toHaveCount(2, { timeout: TIMEOUT.CONTROL_LOADING });
    } catch (e) {
      errors.push(`[1.1.2.63] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.64: [Quyền Owner] Khả năng xóa dữ liệu khi đã chọn
  await test.step("1.1.2.64 - [Quyền Owner] Khả năng xóa dữ liệu khi đã chọn", async () => {
    try {
      const tagCount = await page
        .getByTestId(testId)
        .locator(".ant-tag")
        .count();
      if (tagCount < 2) {
        await pw.inputPeoplePicker(testId, "ecm05");
      }
      await page
        .getByTestId(testId)
        .locator(".ant-tag-close-icon")
        .last()
        .click();
      await expect(page.getByTestId(testId).locator(".ant-tag"), {
        message: "Lỗi: Sau khi xóa phải còn lại 1 tag trong [Quyền Owner]",
      }).toHaveCount(1, { timeout: TIMEOUT.CONTROL_LOADING });
    } catch (e) {
      errors.push(`[1.1.2.64] ${(e as Error).message}`);
    }
  });

  if (errors.length > 0) {
    throw new Error(`Các test case thất bại:\n${errors.join("\n")}`);
  }
};

test(
  "UC19 1.1.2.60-63-64 - [Quyền Owner] Tổng hợp kiểm tra pp-multi-usersRightOwner - Thủ thư " +
    ACCOUNT.LIBRARIAN,
  async ({ librarian }) => {
    await runTest(librarian);
  },
);
