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 {
  loadTestDataSync as loadExcelData,
  TestDataSet,
} from "../../../src/utils/test-data-reader";
import { defaultData11227 } from "./1.1.2.27.data";
import { uc19RegisterURLPath } from "../uc19.default.data";

const BASE_URL = process.env.BASE_URL!;
const testDataSets = loadExcelData(__filename, defaultData11227);

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

  await test.step("1. Truy cập màn hình Kho tài liệu", async () => {
    await page.goto(`${BASE_URL}${uc19RegisterURLPath}`);
  });
  await test.step("2. Chọn nút Tạo mới", async () => {
    await pw.isVisible("btn-create-hstl", TIMEOUT.PAGE_LOADING);
    await pw.wait(TIMEOUT.HARD_WAITING);
    await pw.clickButton("btn-create-hstl");
  });
  await test.step("3. Nhập dữ liệu, để trống Dự án và bấm Lưu lại", async () => {
    await pw.batchInput(
      dataSet.data.filter((o) => o.testId !== "sel-loaiBoHoSo"),
    );
    await pw.inputWithSelDuAn();
    await pw.clearValue("sel-duAn");

    await pw.clickButton("btn-save");
  });
  await test.step("Kết quả", async () => {
    await expect(page.getByTestId("lbl-error-msg"), {
      message: "Lỗi: Không hiển thị thông báo lỗi trường bắt buộc",
    }).toBeVisible({ timeout: TIMEOUT.VALIDATE_WAITING });
    // await expect(page.getByTestId("lbl-error-msg"), {
    //   message: "Lỗi: Nội dung thông báo lỗi không đúng",
    // }).toHaveText("Trường dự án bắt buộc!", {
    //   timeout: TIMEOUT.VALIDATE_WAITING,
    // });
  });
};

for (const dataSet of testDataSets) {
  test(`UC19 1.1.2.30 - [Dự án] Kiểm tra trường bắt buộc - ${dataSet.name} - Thủ thư ${ACCOUNT.LIBRARIAN}`, async ({
    librarian,
  }) => {
    await runTest(librarian, dataSet);
  });
}
for (const dataSet of testDataSets) {
  test(`UC19 1.1.2.30 - [Dự án] Kiểm tra trường bắt buộc - ${dataSet.name} - Admin ${ACCOUNT.ADMIN}`, async ({
    admin,
  }) => {
    await runTest(admin, dataSet);
  });
}
