import { Page } from "@playwright/test";
import { test } from "../../src/fixture/base-test";
import { DOC_PERM } from "../../src/screen-instructions/KHO-TAI-LIEU.functions";
import { dungDuLieuBoHoSo } from "./1.4.1.setup";
import { moTabCauTrucHoSo, expectKhongCoNutTaoMoi } from "./1.4.1.steps";

/**
 * ============================================================================
 * UC22 — 1.4.1 Tạo thư mục trong Cấu trúc hồ sơ
 * Case 155 (QA): Kiểm tra KHÔNG hiển thị button Thêm thư mục — top menu
 * ============================================================================
 *
 * ── NGUYÊN VĂN TESTCASE ─────────────────────────────────────────────────────
 * Tiền điều kiện:
 *   - Người dùng **không** là Thủ thư / ITAdmin / Owner / **Quyền Tạo mới ở BHS**
 * Thao tác:
 *   1. Truy cập màn chi tiết BHS, chọn tab Cấu trúc hồ sơ
 *   2. Kiểm tra hiển thị nút Tạo mới
 * Mong muốn:
 *   Trên top menu, **không** hiển thị nút Thêm mới với 2 button con: Thư mục, Tài liệu.
 *
 * Đây là **mặt ngược của case 153** (153: các vai có quyền thì nút hiển thị).
 * Tiền điều kiện chung của mục 1.4.1: xem `1.4.1.md`.
 *
 * ── CÁCH DỰNG TIỀN ĐIỀU KIỆN (xem `1.4.1.setup.ts`) ─────────────────────────
 *     BHS  (Owner = Thủ thư; cấp cho vai cần test 1 quyền **không phải** Owner/Tạo mới)
 *      └─ ...-TM      ← thư mục kế thừa quyền BHS
 *     → BHS chuyển "Hoạt động".
 *
 * ⚠️ Vai phải có **ít nhất 1 quyền** ở BHS, nếu không sẽ không mở được màn chi tiết BHS
 *    (toast "Bạn không có quyền xem!" — `KHO-TAI-LIEU.PHAN-QUYEN-THEO-VAI.md` mục 1) và
 *    không tới được bước "Kiểm tra hiển thị nút Tạo mới" của QA.
 *
 * ── CÁC BƯỚC SCRIPT THỰC HIỆN ───────────────────────────────────────────────
 * B1. Vai cần test mở BHS → tab "Cấu trúc hồ sơ".
 * B2. Assert `btn-tao-moi` **không hiển thị** trên toolbar của tab (dùng `toBeHidden` nên đạt cả
 *     khi element không tồn tại). Không có nút thì cũng không có dropdown 2 mục con Thư mục / Tài liệu.
 *
 * ── 2 TEST = 2 BỘ HỒ SƠ RIÊNG ───────────────────────────────────────────────
 * | # | Vai thao tác | Quyền duy nhất ở BHS  | Ghi chú                                          |
 * |---|--------------|-----------------------|--------------------------------------------------|
 * | 1 | ecm06        | **Xem** (VIEW)        | Đã khảo sát: vai VIEW không có `btn-tao-moi`     |
 * | 2 | ecm05        | **Cập nhật** (EDIT)   | ⚠️ Vai EDIT **chưa được khảo sát** — xem ghi chú |
 *
 * ⚠️ TEST 2: `KHO-TAI-LIEU.PHAN-QUYEN-THEO-VAI.md` mục 5 ghi rõ vai **ADD / EDIT / DOWNLOAD cấp
 *    BHS chưa được khảo sát** → chưa biết app có ẩn `btn-tao-moi` với vai EDIT hay không.
 *    Theo tiền điều kiện QA (EDIT không phải Owner/Tạo mới) thì **phải ẩn**, nên case cứ assert
 *    đúng mong muốn đó; nếu chạy thật mà nút vẫn hiện thì đó là **kết quả test** để QA/DEV kết luận,
 *    không phải lỗi script.
 */

const runTest = async (
  librarian: Page,
  userPage: Page,
  maCase: string,
  vai: { account: string; permTestId: string },
) => {
  const duLieu = await dungDuLieuBoHoSo(librarian, {
    maCase: `155-${maCase}`,
    quyenBanDau: { permTestId: vai.permTestId, account: vai.account },
    chuyenSangHoatDong: true,
  });

  await moTabCauTrucHoSo(userPage, duLieu);
  await expectKhongCoNutTaoMoi(userPage);
};

/** TEST 1 — `ecm06` chỉ có **Quyền Xem** ở BHS. */
test(
  "UC22 155 - Kiểm tra không hiển thị button Thêm thư mục - Người dùng chỉ có quyền Xem ở BHSecm06",
  async ({ librarian, ecm06 }) => {
    await runTest(librarian, ecm06, "VIEW", {
      account: "ecm06",
      permTestId: DOC_PERM.VIEW,
    });
  },
);

/** TEST 2 — `ecm05` chỉ có **Quyền Cập nhật** ở BHS (không phải Owner / Tạo mới). */
test(
  "UC22 155 - Kiểm tra không hiển thị button Thêm thư mục - Người dùng chỉ có quyền Cập nhật ở BHSecm05",
  async ({ librarian, ecm05 }) => {
    await runTest(librarian, ecm05, "EDIT", {
      account: "ecm05",
      permTestId: DOC_PERM.EDIT,
    });
  },
);
