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-usersRightAdd";

  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. Chọn nút Tạo mới", async () => {
    await pw.isVisible("btn-create-hstl", TIMEOUT.PAGE_LOADING);
    await pw.clickButton("btn-create-hstl");
  });

  // TC 1.1.2.65: [Quyền tạo mới] Kiểm tra giá trị mặc định
  await test.step("1.1.2.65 - [Quyền tạo mới] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty(testId);
    } catch (e) {
      errors.push(`[1.1.2.65] ${(e as Error).message}`);
    }
  });

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

  // TC 1.1.2.68: [Quyền tạo mới] Khả năng xóa dữ liệu khi đã chọn
  await test.step("1.1.2.68 - [Quyền tạo mới] 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 === 0) {
        await pw.inputPeoplePicker(testId, "ecm05,ecm06");
      }
      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 lần 1 phải còn 1 tag trong [Quyền tạo mới]",
      }).toHaveCount(1, { timeout: TIMEOUT.CONTROL_LOADING });
      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 lần 2 phải không còn tag nào trong [Quyền tạo mới]",
      }).toHaveCount(0, { timeout: TIMEOUT.CONTROL_LOADING });
    } catch (e) {
      errors.push(`[1.1.2.68] ${(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.65-67-68 - [Quyền tạo mới] Tổng hợp kiểm tra pp-multi-usersRightAdd - Thủ thư " +
    ACCOUNT.LIBRARIAN,
  async ({ librarian }) => {
    await runTest(librarian);
  },
);
