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) => {
  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 expect(pw.getElement("lbl-header-modal-title"), {
      message: 'Lỗi: Tiêu đề modal không phải "Tạo mới phiếu yêu cầu"',
    }).toHaveText("Tạo mới phiếu yêu cầu", { timeout: TIMEOUT.VALIDATE_WAITING });
    await expect(page.getByTestId("lbl-form-group-title"), {
      message: "Lỗi: Các nhóm thông tin trên form không đúng",
    }).toHaveText(["Thông tin hồ sơ", "Phân quyền hồ sơ"], { timeout: TIMEOUT.VALIDATE_WAITING });
  });

  await test.step("3. Nhập đủ thông tin, sau đó xóa và chọn lại Đơn vị mới", async () => {
    await pw.batchInput(uc88Default);
    await page.getByTestId("tree-sel-department").hover();
    await page.getByTestId("tree-sel-department").locator(".ant-select-clear").click();
    await pw.inputTreeDropDown(
      "tree-sel-department",
      "Ban Điều hành Tập đoàn",
      ".departmentTreeSelect .cssDepName",
    );
  });

  await test.step("4. Bấm Lưu", async () => {
    await pw.clickButton("btn-save");
  });

  await test.step("Kết quả", async () => {
    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.valueShouldBe("tree-sel-department", "Ban Điều hành Tập đoàn", TIMEOUT.VALIDATE_WAITING);
  });
};

test(
  "UC88 1.2.2.9 - Đơn vị: chọn từ orgchart và có thể Clear/Reset - Thủ thư " + ACCOUNT.LIBRARIAN,
  async ({ librarian }) => { await runTest(librarian); },
);
test(
  "UC88 1.2.2.9 - Đơn vị: chọn từ orgchart và có thể Clear/Reset - Admin " + ACCOUNT.ADMIN,
  async ({ admin }) => { await runTest(admin); },
);
test(
  "UC88 1.2.2.9 - Đơn vị: chọn từ orgchart và có thể Clear/Reset - End user " + ACCOUNT.END_USER,
  async ({ end_user }) => { await runTest(end_user); },
);
