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

const BASE_URL = process.env.BASE_URL!;

test.describe.serial("UC37 1.2.1 - Kiểm tra nút Chuyển Hoạt động", () => {
  let hosoUrl: string;

  test(
    "1.2.1.1 - Admin tạo hồ sơ và thấy nút Chuyển Hoạt động - " + ACCOUNT.ADMIN,
    async ({ admin }) => {
      const pw = new PW(admin);

      await test.step("1. Truy cập màn hình Kho tài liệu", async () => {
        await admin.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");
      });

      await test.step("3. Nhập đủ thông tin bắt buộc", async () => {
        await pw.batchInput(
          uc37DefaultData.filter((field) => field.testId !== "txt-tenHoSo"),
          true,
        );
        const title = "AT - Hồ sơ tự động " + new Date().getTime();
        await pw.inputText("txt-tenHoSo", title);
      });

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

      await test.step("Kết quả", async () => {
        await expect(admin.locator(".ant-message-success"), {
          message: 'Lỗi: Thông báo không phải "Thành công"',
        }).toHaveText("Thành công", { timeout: TIMEOUT.ACTION_LOADING });
        await expect(admin.getByTestId("lbl-modal-title").locator("button"), {
          message: 'Lỗi: Trạng thái hồ sơ không phải "Khai báo"',
        }).toHaveText("Khai báo", { timeout: TIMEOUT.VALIDATE_WAITING });
        await expect(admin.getByTestId("btn-move-active"), {
          message: "Lỗi: Nút Chuyển Hoạt động không hiển thị với Admin",
        }).toBeVisible({ timeout: TIMEOUT.VALIDATE_WAITING });
        await expect(admin.getByTestId("btn-move-active"), {
          message: 'Lỗi: Text nút không phải "Chuyển Hoạt động"',
        }).toHaveText("Chuyển Hoạt động", {
          timeout: TIMEOUT.VALIDATE_WAITING,
        });
        hosoUrl = admin.url();
      });
    },
  );

  test(
    "1.2.1.2 - Thủ thư nhìn thấy nút Chuyển Hoạt động - " + ACCOUNT.LIBRARIAN,
    async ({ librarian }) => {
      test.skip(!hosoUrl, "Bỏ qua vì 1.2.1.1 chưa tạo được hồ sơ");

      await test.step("1. Truy cập chi tiết hồ sơ vừa tạo", async () => {
        await librarian.goto(hosoUrl);
      });

      await test.step("Kết quả", async () => {
        await expect(librarian.getByTestId("btn-move-active"), {
          message: "Lỗi: Thủ thư không nhìn thấy nút Chuyển Hoạt động",
        }).toBeVisible({ timeout: TIMEOUT.PAGE_LOADING });
        await expect(librarian.getByTestId("btn-move-active"), {
          message: 'Lỗi: Text nút không phải "Chuyển Hoạt động"',
        }).toHaveText("Chuyển Hoạt động", {
          timeout: TIMEOUT.VALIDATE_WAITING,
        });
      });
    },
  );

  test(
    "1.2.1.3 - End user không nhìn thấy nút Chuyển Hoạt động - " +
      ACCOUNT.END_USER,
    async ({ end_user }) => {
      test.skip(!hosoUrl, "Bỏ qua vì 1.2.1.1 chưa tạo được hồ sơ");

      await test.step("1. Truy cập chi tiết hồ sơ vừa tạo", async () => {
        await end_user.goto(hosoUrl);
      });

      await test.step("Kết quả", async () => {
        await expect(end_user.getByTestId("btn-move-active"), {
          message: "Lỗi: End user thấy nút Chuyển Hoạt động (không được phép)",
        }).not.toBeVisible({ timeout: TIMEOUT.PAGE_LOADING });
      });
    },
  );
});
