import { Page } from "@playwright/test";
import { test } from "../../src/fixture/base-test";
import { PW } from "../../src/utils/PW";
import { createBoHoSo } from "../../src/screen-instructions/KHO-TAI-LIEU.functions";

/**
 * Dựng dữ liệu tiền điều kiện dùng chung cho bộ case **1.4.8 — Nhập cấu trúc hồ sơ từ file Excel**.
 *
 * ⚠️ Mã UC của mục chưa được QA chốt → prefix dữ liệu tạm là `AT-1.4.8-...`
 * (đổi khi chốt được UC — xem `tests/1.4.8/1.4.8.md`).
 *
 * Đọc `tests/1.4.8/1.4.8.md` trước khi sửa file này.
 */

export type DungBoHoSoNhapExcelOptions = {
  /** Mã ngắn để đặt tên dữ liệu, vd `"664"` → `AT-1.4.8-664-<ts>` */
  maCase: string;
  /**
   * Cấp quyền cho 1 người dùng / nhóm **ngay khi tạo BHS** — dùng khi vai cần test không phải
   * người tạo BHS (`peoplePickers` của `createBoHoSo`; khối "Phân quyền truy cập" trên màn chi tiết
   * bị app ẩn nên đây là chỗ duy nhất gán lúc tạo — `KHO-TAI-LIEU.md` mục 4.6).
   */
  quyenBoHoSo?: { permTestId: string; account: string };
};

export type DuLieuNhapExcel = {
  /** URL `?itemId=` của BHS — luôn dùng biến này để mở lại BHS */
  recordUrl: string;
  /** Tên BHS */
  tenBoHoSo: string;
};

/**
 * Tạo **1 Bộ hồ sơ mới, rỗng** (chưa có thư mục / tài liệu nào) để nhập cấu trúc từ file Excel.
 *
 * BHS rỗng là điều kiện để case assert được "cấu trúc trong bảng = đúng nội dung file Excel":
 * có sẵn thư mục/tài liệu thì không tách được cái nào do nhập excel sinh ra.
 *
 * BHS để nguyên trạng thái **"Khai báo"** (người gọi chính là người tạo nên vẫn mở lại được —
 * `KHO-TAI-LIEU.PHAN-QUYEN-THEO-VAI.md` mục 1). Case nào cần vai khác thao tác thì truyền
 * `quyenBoHoSo` rồi tự `chuyenHoatDong` trong case đó.
 */
export const dungBoHoSoNhapExcel = async (
  page: Page,
  opts: DungBoHoSoNhapExcelOptions,
): Promise<DuLieuNhapExcel> => {
  const pw = new PW(page);
  const tenBoHoSo = `AT-1.4.8-${opts.maCase}-${Date.now()}`;

  const duLieu: DuLieuNhapExcel = { recordUrl: "", tenBoHoSo };

  const moTaQuyen = opts.quyenBoHoSo
    ? ` (cấp ${opts.quyenBoHoSo.permTestId} cho "${opts.quyenBoHoSo.account}")`
    : "";

  await test.step(`Tiền điều kiện: tạo bộ hồ sơ mới "${tenBoHoSo}"${moTaQuyen}`, async () => {
    duLieu.recordUrl = await createBoHoSo(page, pw, tenBoHoSo, {
      peoplePickers: opts.quyenBoHoSo
        ? [
            {
              testId: opts.quyenBoHoSo.permTestId,
              account: opts.quyenBoHoSo.account,
            },
          ]
        : undefined,
    });
  });

  return duLieu;
};
