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 { uc89Default } from "../uc89.default.data";

const BASE_URL = process.env.BASE_URL!;

const runTest = async (page: Page, otherPage: Page) => {
  const pw = new PW(page);
  let rowKey: string | null = null;

  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 và Lưu rồi tìm kiếm để lấy rowKey", async () => {
    const requestTitle = `AT - Bộ hồ sơ - ${new Date().getTime()}`;
    await pw.batchInput(
      uc89Default.filter((item) => item.testId !== "txt-rfa-title"),
    );
    await pw.inputText("txt-rfa-title", requestTitle);
    await pw.clickButton("btn-save");
    await expect(page.locator(".ant-notification-notice-message"), {
      message: 'Lỗi: Không hiển thị thông báo "Lưu thông tin thành công"',
    }).toContainText("Lưu thông tin thành công", {
      timeout: TIMEOUT.ACTION_LOADING,
    });
    await pw.clickButton("btn-close-modal");
    await page.locator("#keyword").fill(requestTitle);
    await page.locator("#keyword").press("Enter");
    rowKey = await page
      .locator("tr.ant-table-row.ant-table-row-level-0.group")
      .first()
      .getAttribute("data-row-key");
  });

  await test.step("4. Truy cập phiếu với user không có quyền", async () => {
    await otherPage.goto(
      `${BASE_URL}/my-request/dang-ky-khoi-tao?itemId=${rowKey}`,
    );
  });

  await test.step("Kết quả", async () => {
    await expect(
      otherPage.locator(".ant-modal-title", { hasText: "Yêu cầu truy cập" }),
      { message: 'Lỗi: Không hiển thị popup "Yêu cầu truy cập"' },
    ).toBeVisible({ timeout: TIMEOUT.ACTION_LOADING });
  });
};

test(
  "UC89 2.1.36 - Không truy cập được chi tiết phiếu khi không có quyền - Thủ thư " +
    ACCOUNT.LIBRARIAN,
  async ({ librarian, ecm02 }) => {
    await runTest(librarian, ecm02);
  },
);
test(
  "UC89 2.1.36 - Không truy cập được chi tiết phiếu khi không có quyền - Admin " +
    ACCOUNT.ADMIN,
  async ({ admin, ecm02 }) => {
    await runTest(admin, ecm02);
  },
);
test(
  "UC89 2.1.36 - Không truy cập được chi tiết phiếu khi không có quyền - End user " +
    ACCOUNT.END_USER,
  async ({ end_user, ecm02 }) => {
    await runTest(end_user, ecm02);
  },
);
