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,
  expectKhongCoNutThemThuMucODong,
} from "./1.4.1.steps";

/**
 * ============================================================================
 * UC22 — 1.4.1 Tạo thư mục trong Cấu trúc hồ sơ
 * Case 156 (QA): Kiểm tra KHÔNG hiển thị button Thêm thư mục — menu mở rộng của dòng
 * ============================================================================
 *
 * ── NGUYÊN VĂN TESTCASE ─────────────────────────────────────────────────────
 * Tiền điều kiện:
 *   - Người dùng **không có quyền Owner / Tạo mới ở cấu trúc thư mục**
 *   - Thư mục đã tồn tại
 * 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 Thêm thư mục trong menu mở rộng của dòng
 * Mong muốn:
 *   **Không** hiển thị button Thêm thư mục ở menu mở rộng tại dòng mà người dùng **không có quyền**.
 *
 * Đây là **mặt ngược của case 154** (154: dòng có quyền thì hiện; 156: dòng không có quyền thì ẩn).
 * 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 → vai **thấy** dòng nhưng **không** được tạo mới
 *     → BHS chuyển "Hoạt động".
 *
 * ⚠️ Vai phải có ít nhất quyền Xem để **thấy được dòng thư mục** — không có quyền gì thì không mở
 *    được BHS (`KHO-TAI-LIEU.PHAN-QUYEN-THEO-VAI.md` mục 1), mà bảng Cấu trúc hồ sơ cũng chỉ hiện
 *    những nhánh vai có quyền (mục 3) → sẽ không còn dòng nào để kiểm tra.
 *
 * ── CÁC BƯỚC SCRIPT THỰC HIỆN ───────────────────────────────────────────────
 * B1. Vai cần test mở BHS → tab "Cấu trúc hồ sơ".
 * B2. Dòng thư mục `...-TM` phải **thấy được**, và menu mở rộng của dòng **không** có mục
 *     `mni-them-thu-muc`. Vai không có quyền tạo có thể **không có luôn nút mở menu**
 *     `btn-more-action-<id>` → trường hợp đó cũng thoả mong muốn của QA (xem `1.4.1.steps.ts`).
 *
 * ── 2 TEST = 2 BỘ HỒ SƠ RIÊNG ───────────────────────────────────────────────
 * | # | Vai thao tác | Quyền duy nhất ở BHS | Ghi chú                                            |
 * |---|--------------|----------------------|----------------------------------------------------|
 * | 1 | ecm06        | **Xem** (VIEW)       | Vai VIEW: `btn-more` của tab đã khảo sát là bị ẩn   |
 * | 2 | ecm05        | **Cập nhật** (EDIT)  | ⚠️ Vai EDIT chưa được khảo sát                     |
 *
 * ⚠️ Menu hành động của **dòng** trong bảng Cấu trúc hồ sơ với vai không phải Owner BHS hiện
 *    **chưa được khảo sát** (`KHO-TAI-LIEU.PHAN-QUYEN-THEO-VAI.md` mục 5) → case này chính là
 *    phép đo hành vi đó. Kết quả chạy thật cần đưa lại vào tài liệu phân quyền theo vai.
 */

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

  await moTabCauTrucHoSo(userPage, duLieu);
  await expectKhongCoNutThemThuMucODong(userPage, duLieu.tenThuMuc);
};

/** TEST 1 — `ecm06` chỉ có **Quyền Xem** ở BHS. */
test(
  "UC22 156 - 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 156 - 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,
    });
  },
);
