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.2.2-3 - Popup Xác nhận chuyển hoạt động", () => {
  let url = "";

  test(
    "1.2.2.2 - Kiểm tra popup Xác nhận khi bấm 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, true);
      });

      await test.step("4. Bấm Lưu lại", async () => {
        await pw.clickButton("btn-save");
        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 không phải "Khai báo"',
        }).toHaveText("Khai báo", { timeout: TIMEOUT.VALIDATE_WAITING });
      });

      await test.step("5. Bấm nút Chuyển Hoạt động", async () => {
        await pw.clickButton("btn-move-active");
      });

      await test.step("Kết quả", async () => {
        await expect(admin.locator(".ant-modal-confirm-title"), {
          message: "Lỗi: Tiêu đề popup xác nhận không đúng",
        }).toHaveText("Xác nhận chuyển hoạt động", { timeout: TIMEOUT.VALIDATE_WAITING });
        await expect(admin.locator(".ant-modal-confirm-content"), {
          message: "Lỗi: Nội dung popup xác nhận không đúng",
        }).toHaveText(
          "Thao tác này sẽ chuyển hoạt động các Tài liệu trong Cấu trúc hồ sơ. Bạn có chắc chắn muốn chuyển hoạt động",
          { timeout: TIMEOUT.VALIDATE_WAITING },
        );
        await expect(admin.locator(".ant-modal-confirm-btns .ant-btn-primary"), {
          message: 'Lỗi: Nút xác nhận không có text "Chuyển hoạt động"',
        }).toHaveText("Chuyển hoạt động", { timeout: TIMEOUT.VALIDATE_WAITING });
        await expect(admin.locator(".ant-modal-confirm-btns .ant-btn-default"), {
          message: 'Lỗi: Nút hủy không có text "Hủy bỏ"',
        }).toHaveText("Hủy bỏ", { timeout: TIMEOUT.VALIDATE_WAITING });
        url = admin.url();
      });
    },
  );

  test(
    "1.2.2.3 - Xác nhận chuyển hoạt động thành công tại popup - " + ACCOUNT.ADMIN,
    async ({ admin }) => {
      const pw = new PW(admin);

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

      await test.step("2. Bấm nút Chuyển Hoạt động", async () => {
        await pw.clickButton("btn-move-active");
      });

      await test.step("3. Xác nhận tại popup", async () => {
        await admin.locator(".ant-modal-confirm-btns .ant-btn-primary").click();
      });

      await test.step("Kết quả", async () => {
        await expect(admin.locator(".ant-message-notice-content"), {
          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 không chuyển sang "Đang hoạt động"',
        }).toHaveText("Đang hoạt động", { timeout: TIMEOUT.VALIDATE_WAITING });
      });
    },
  );
});
