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";

const BASE_URL = process.env.BASE_URL!;

const runTest = async (page: Page) => {
  const pw = new PW(page);
  const errors: string[] = [];

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

  // TC 1.1.2.6: [Tên hồ sơ] Kiểm tra giá trị mặc định
  await test.step("1.1.2.6 - [Tên hồ sơ] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("txt-tenHoSo");
    } catch (e) {
      errors.push(`[1.1.2.6] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.9: [Thư mục lưu trữ] Kiểm tra giá trị mặc định
  await test.step("1.1.2.9 - [Thư mục lưu trữ] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isTreeDropDownListEmpty("tree-sel-mucLuuTru");
    } catch (e) {
      errors.push(`[1.1.2.9] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.13: [Công ty. Tổ chức] Kiểm tra giá trị mặc định
  await test.step("1.1.2.13 - [Công ty. Tổ chức] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("sel-companyInvestor");
    } catch (e) {
      errors.push(`[1.1.2.13] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.17: [Đơn vị sở hữu] Kiểm tra giá trị mặc định
  await test.step("1.1.2.17 - [Đơn vị sở hữu] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("tree-sel-owner-department");
    } catch (e) {
      errors.push(`[1.1.2.17] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.22: [Loại Hồ sơ] Kiểm tra giá trị mặc định
  await test.step("1.1.2.22 - [Loại Hồ sơ] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("sel-loaiBoHoSo");
    } catch (e) {
      errors.push(`[1.1.2.22] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.31: [Độ mật] Kiểm tra giá trị mặc định
  await test.step("1.1.2.31 - [Độ mật] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.valueShouldBe("sel-securityLevel", "Thường");
    } catch (e) {
      errors.push(`[1.1.2.31] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.40: [Cấu trúc HS] Kiểm tra giá trị mặc định
  await test.step("1.1.2.40 - [Cấu trúc HS] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("sel-cauTrucHoSo");
    } catch (e) {
      errors.push(`[1.1.2.40] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.44: [Số hiệu HS] Kiểm tra giá trị mặc định
  await test.step("1.1.2.44 - [Số hiệu HS] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("txt-soHieuHoSo");
    } catch (e) {
      errors.push(`[1.1.2.44] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.46: [Trạng thái hiển thị] Kiểm tra giá trị mặc định
  await test.step("1.1.2.46 - [Trạng thái hiển thị] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.valueShouldBe("sel-trangThai", "Public");
    } catch (e) {
      errors.push(`[1.1.2.46] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.49: [Thời hạn lưu trữ] Kiểm tra giá trị mặc định
  await test.step("1.1.2.49 - [Thời hạn lưu trữ] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.valueShouldBe("sel-storageTerm", "Vĩnh viễn");
    } catch (e) {
      errors.push(`[1.1.2.49] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.52: [Tình trạng cập nhật] Kiểm tra giá trị mặc định
  await test.step("1.1.2.52 - [Tình trạng cập nhật] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("sel-hardCopyStatus");
    } catch (e) {
      errors.push(`[1.1.2.52] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.55: [Từ khóa] Kiểm tra giá trị mặc định
  await test.step("1.1.2.55 - [Từ khóa] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("sel-tags-tuKhoa");
    } catch (e) {
      errors.push(`[1.1.2.55] ${(e as Error).message}`);
    }
  });

  // TC 1.1.2.58: [Ghi chú] Kiểm tra giá trị mặc định
  await test.step("1.1.2.58 - [Ghi chú] Kiểm tra giá trị mặc định", async () => {
    try {
      await pw.isEmpty("txa-ghiChu");
    } catch (e) {
      errors.push(`[1.1.2.58] ${(e as Error).message}`);
    }
  });

  if (errors.length > 0) {
    throw new Error(`Các test case thất bại:\n${errors.join("\n")}`);
  }
};

test(
  "UC19 1.1.2 - Tổng hợp kiểm tra giá trị mặc định các trường - Thủ thư " +
    ACCOUNT.LIBRARIAN,
  async ({ librarian }) => {
    await runTest(librarian);
  },
);
