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";
import { uc88Default } from "../uc88.default.data";

const BASE_URL = process.env.BASE_URL!;

const runTest = async (page: Page, accountEmail: string) => {
  const pw = new PW(page);

  await test.step("1. Truy cập màn hình Đăng ký khởi tạo BHS", async () => {
    await page.goto(`${BASE_URL}/my-request/dang-ky-khoi-tao`);
  });

  await test.step("2. Mở form Tạo mới phiếu yêu cầu", async () => {
    await pw.isVisible("btn-create", TIMEOUT.PAGE_LOADING);
    await pw.clickButton("btn-create");
  });

  await test.step("3. Nhập đủ thông tin, mở orgchart và thêm user hiện tại vào Quyền owner", async () => {
    await pw.batchInput(uc88Default);
    await pw.clickButton("pp-multi-quyenowner-orgchart-btn");
    await pw.wait(3000);
    await page
      .locator(
        ".ant-modal-root .left-layout-organization .ant-tree-list-holder-inner .ant-tree-treenode",
      )
      .first()
      .click();
    await page
      .locator(".ant-modal-root .right-layout-organization #keyword")
      .fill(accountEmail);
    await page
      .locator(
        ".ant-modal-root .right-layout-organization .ant-table-row-level-0 .ant-checkbox-wrapper",
      )
      .first()
      .click();
    await page
      .locator(".ant-modal-root .right-layout-organization")
      .getByRole("button")
      .getByText("Thêm")
      .click();
  });

  await test.step("4. Xóa 1 quyền owner rồi Lưu", async () => {
    await page
      .getByTestId("pp-multi-quyenowner-select")
      .locator(".ant-tag-close-icon")
      .first()
      .click();
    await pw.clickButton("btn-save");
  });

  await test.step("Kết quả", async () => {
    await expect(
      page
        .getByTestId("pp-multi-quyenowner-select")
        .locator(".ant-select-selection-overflow-item"),
      { message: "Lỗi: Số lượng quyền owner không đúng sau khi lưu" },
    ).toHaveCount(2, { timeout: TIMEOUT.ACTION_LOADING });
  });
};

test(
  "UC88 1.2.2.29 - Quyền owner: không cho phép chọn trùng/duplicate và hỗ trợ Clear - Thủ thư " +
    ACCOUNT.LIBRARIAN,
  async ({ librarian }) => {
    await runTest(librarian, "ecm01@fxp.vn");
  },
);
test(
  "UC88 1.2.2.29 - Quyền owner: không cho phép chọn trùng/duplicate và hỗ trợ Clear - Admin " +
    ACCOUNT.ADMIN,
  async ({ admin }) => {
    await runTest(admin, "ecm09@fxp.vn");
  },
);
test(
  "UC88 1.2.2.29 - Quyền owner: không cho phép chọn trùng/duplicate và hỗ trợ Clear - End user " +
    ACCOUNT.END_USER,
  async ({ end_user }) => {
    await runTest(end_user, "ecm04@fxp.vn");
  },
);
