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 { uc21Default, uc21DefaultUrl } from "../uc21.default.data";

const BASE_URL = process.env.BASE_URL!;

const runTest = async (page: Page, otherAcc: 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}${uc21DefaultUrl}`);
  });

  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.wait(TIMEOUT.HARD_WAITING);
    await pw.clickButton("btn-create");
  });

  await test.step("3. Tạo hoàn thành 1 phiếu và Lưu thành công", async () => {
    await pw.batchInput(uc21Default, true);

    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 test.step('4. Bấm "btn-send-request" để gửi yêu cầu', async () => {
    await pw.clickButton("btn-send-request");

    await expect(page.locator(".ant-notification-notice-message"), {
      message: 'Lỗi: Không hiển thị thông báo "Gửi yêu cầu thành công"',
    }).toContainText("Gửi yêu cầu thành công", {
      timeout: TIMEOUT.ACTION_LOADING,
    });
  });

  await test.step("Kết quả", async () => {
    await expect(page.getByTestId("btn-save"), {
      message: 'Lỗi: Vẫn hiển thị nút "btn-save" sau khi đã gửi yêu cầu',
    }).not.toBeVisible({ timeout: TIMEOUT.VALIDATE_WAITING });
  });
};

test(
  "UC88 1.2.3.43 - Không cho chỉnh sửa phiếu khi phiếu không ở trạng thái Đang soạn - Thủ thư " +
    ACCOUNT.LIBRARIAN,
  async ({ librarian, ecm05 }) => {
    await runTest(librarian, ecm05);
  },
);
test(
  "UC88 1.2.3.43 - Không cho chỉnh sửa phiếu khi phiếu không ở trạng thái Đang soạn - Admin " +
    ACCOUNT.ADMIN,
  async ({ admin, ecm05 }) => {
    await runTest(admin, ecm05);
  },
);
test(
  "UC88 1.2.3.43 - Không cho chỉnh sửa phiếu khi phiếu không ở trạng thái Đang soạn - End user " +
    ACCOUNT.END_USER,
  async ({ end_user, ecm05 }) => {
    await runTest(end_user, ecm05);
  },
);
