import { test, expect } from "../../../src/fixture/base-test";
import { TIMEOUT } from "../../../src/constant/timeout";
import { PW } from "../../../src/utils/PW";
import { uc89Default } from "../uc89.default.data";

const BASE_URL = process.env.BASE_URL!;

test("UC89 2.3.43 - Tạo mới BHS sau khi hoàn thành đăng ký khởi tạo", async ({
  end_user,
  ecm03,
  librarian,
}) => {
  const pw = new PW(end_user);
  let url: string | null = null;

  await test.step("1. Truy cập màn hình Đăng ký khởi tạo BHS", async () => {
    await end_user.goto(`${BASE_URL}/my-request/dang-ky-khoi-tao`);
  });

  await test.step("2. Tạo phiếu mới và Gửi yêu cầu", async () => {
    await pw.isVisible("btn-create", TIMEOUT.PAGE_LOADING);
    await pw.clickButton("btn-create");
    const requestTitle = `AT - Bộ hồ sơ - ${new Date().getTime()}`;
    await pw.batchInput(
      uc89Default.filter((item) => item.testId !== "txt-rfa-title"),
    );
    await pw.inputText("txt-rfa-title", requestTitle);
    await pw.clickButton("btn-save");
    await expect(end_user.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.isVisible("btn-start-wf", TIMEOUT.PAGE_LOADING);
    await pw.clickButton("btn-start-wf");
    await expect(end_user.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,
    });
    url = await end_user
      .locator("tr.ant-table-row.ant-table-row-level-0.group")
      .first()
      .locator(".ant-table-cell a")
      .nth(1)
      .getAttribute("href");
  });

  await test.step("3. Người duyệt bước 1 (ecm03) phê duyệt", async () => {
    await ecm03.goto(`${url}`);
    await ecm03.getByTestId("btn-approval").click();
    await ecm03
      .locator(".ant-modal-body")
      .getByTestId("txt-workflow-action-comment")
      .fill("Phê duyệt khởi tạo");
    await ecm03
      .locator(".ant-modal-body")
      .getByTestId("btn-workflow-action-modal-ok")
      .click();
    await expect(ecm03.locator(".ant-notification-notice-message"), {
      message: 'Lỗi: Không hiển thị thông báo "Thành công" sau bước 1',
    }).toContainText("Thành công", { timeout: TIMEOUT.ACTION_LOADING });
  });

  await test.step("4. Người duyệt bước 2 (librarian) phê duyệt", async () => {
    await librarian.goto(`${url}`);
    await librarian.getByTestId("btn-approval").click();
    await librarian
      .locator(".ant-modal-body")
      .getByTestId("txt-workflow-action-comment")
      .fill("Phê duyệt khởi tạo");
    await librarian
      .locator(".ant-modal-body")
      .getByTestId("btn-workflow-action-modal-ok")
      .click();
    await expect(librarian.locator(".ant-notification-notice-message"), {
      message: 'Lỗi: Không hiển thị thông báo "Thành công" sau bước 2',
    }).toContainText("Thành công", { timeout: TIMEOUT.ACTION_LOADING });
  });

  await test.step("5. Tìm kiếm BHS mới tạo", async () => {
    const pwLibrarian = new PW(librarian);
    await pwLibrarian.clickButton("txt-search");
    await pwLibrarian.inputText("txt-search", "");
    await pwLibrarian.enter();
    await pwLibrarian.isVisible("tbl-search-result", TIMEOUT.PAGE_LOADING);
    await librarian
      .getByTestId("tbl-search-result")
      .locator(".ant-table-row.ant-table-row-level-0")
      .first()
      .click();
  });

  await test.step("Kết quả", async () => {
    await expect(librarian.getByTestId("lbl-modal-title").locator("button"), {
      message: 'Lỗi: Trạng thái BHS mới không phải "Đang hoạt động"',
    }).toHaveText("Đang hoạt động", { timeout: TIMEOUT.ACTION_LOADING });
  });
});
