// Admin Manual 02 — Quản lý Users + Roles (cho QTV)
// Style: end-user friendly — các bước quản trị cơ bản.
const fs = require('fs'); const path = require('path');
const H = require('./_helpers');
const { h1, h2, h3, p, bullet, num, note, warn, tip, titlePage, buildDoc, Packer } = H;

const children = [
  ...titlePage(
    "Hướng dẫn Quản lý Users + Roles",
    "Phần 02 (Admin): Tạo User, Gán Role, Reset Password, Khóa/Mở, Bypass Review",
  ),

  h1("1. Truy cập trang Users"),
  num("Đăng nhập admin tại https://admin.solutions.com.vn"),
  num("Sidebar → Hệ thống → Users (hoặc URL /system/users)"),
  num("Trang hiển thị danh sách user + filter + search"),

  h1("2. Tạo User mới"),
  num("Click \"Thêm user\" góc trên phải"),
  num("Điền form: Email công ty / Họ tên / Phòng ban / Chức vụ / Password tạm"),
  num("Tick các Vai trò gán cho user (1 user có thể có nhiều role)"),
  num("Click \"Tạo\""),
  note("Password tạm khuyến nghị: User@123456. User sẽ bị bắt đổi khi đăng nhập lần đầu."),

  h1("3. Sửa thông tin User"),
  num("Tại danh sách, click icon Pencil ở dòng user"),
  num("Sửa Họ tên / Phòng ban / Chức vụ / Active"),
  num("Click \"Lưu\""),
  warn("Email là read-only — KHÔNG đổi được. Nếu cần đổi email, phải xóa user và tạo lại."),

  h1("4. Gán / Sửa Roles"),
  num("Click icon Shield ở dòng user"),
  num("Tick / Bỏ tick các role"),
  num("Click \"Lưu\""),
  p("12 role hệ thống: Admin / Drafter / DeptManager (TPB) / ProjectManager / Procurement / CostControl / Finance / Accounting / Equipment / Director / AuthorizedSigner / HrAdmin."),
  tip("User được gán Admin role → bypass mọi permission check (dùng cho test hoặc emergency)."),

  h1("5. Reset Password"),
  num("Click icon Key ở dòng user"),
  num("Nhập password mới (≥ 6 ký tự)"),
  num("Click \"Reset\""),
  p("User bị logout khỏi mọi session, phải đăng nhập lại với password mới."),
  warn("Báo password mới cho user qua kênh an toàn (gặp trực tiếp / cuộc gọi). KHÔNG gửi qua email không mã hóa."),

  h1("6. Khóa / Mở khóa User"),
  num("User bị khóa tự động khi đăng nhập sai 5 lần liên tiếp"),
  num("Khi đó icon Lock màu cam hiện ở dòng user"),
  num("Admin click icon Unlock để mở khóa thủ công"),
  bullet("Hoặc đợi 30 phút auto unlock"),

  h1("7. Vô hiệu hóa / Kích hoạt User"),
  num("Click icon X (đỏ) hoặc CheckCircle (xanh) ở cột actions"),
  num("Toggle trạng thái Active"),
  p("User Inactive vẫn còn trong DB nhưng KHÔNG đăng nhập được. Dùng khi nhân viên nghỉ việc."),

  h1("8. Bypass Review (mới — Migration 16)"),
  p("Khi quy trình duyệt 2-cấp phòng ban, mặc định: NV duyệt = Review only, phải TPB Confirm thì phase mới chuyển. \"Bypass Review\" cho phép 1 NV cụ thể duyệt = Confirm trực tiếp (skip Review)."),
  num("Tại danh sách user, click icon ShieldCheck ở dòng user"),
  num("Icon đổi màu fuchsia + cột \"Bypass\" hiện badge \"bypass\""),
  num("Lần duyệt sau, NV này được Stage = Confirm + IsBypassed = true (audit)"),
  bullet("Use case: phòng ban không có TPB, hoặc TPB ủy quyền cho 1 NV cụ thể"),
  bullet("Click lần nữa để TẮT bypass"),

  h1("9. Tìm + Filter user"),
  bullet("Search: tìm theo Email / Họ tên"),
  bullet("Phân trang 20 user/page"),
  tip("Bookmark URL nếu cần truy cập nhanh: /system/users?search=tra.bui"),

  h1("10. Quản lý Roles"),
  num("Sidebar → Hệ thống → Roles (URL /system/roles)"),
  num("Xem 12 role hệ thống: Mã (ShortName) + Tên đầy đủ + Mô tả"),
  num("(Tùy chọn) Tạo role custom ngoài 12 hardcoded — click \"Thêm role\""),
  warn("Sửa role hệ thống có thể ảnh hưởng quy trình duyệt. Test kỹ trước khi đổi."),

  h1("11. Quản lý Permissions"),
  num("Sidebar → Hệ thống → Permissions (URL /system/permissions)"),
  num("Trang 3-panel: Role list trái | Matrix Menu × CRUD giữa | Stats phải"),
  num("Chọn 1 role → Matrix hiển thị quyền theo từng menu key"),
  num("Tick / Bỏ tick CRUD flag → tự động lưu (auto-save)"),
  note("User cần logout / login lại để thấy menu mới sau khi admin đổi quyền."),

  h1("12. Khi gặp lỗi"),
  bullet("Tạo user báo \"Email đã tồn tại\" → kiểm tra danh sách (kể cả Inactive)"),
  bullet("Reset password không tác dụng → check user IsActive = true"),
  bullet("User báo không thấy menu nào → kiểm tra Permissions matrix cho role tương ứng"),
  bullet("Bypass Review không có hiệu lực → user phải có Phòng ban gán + role không phải DeptManager"),
];

const doc = buildDoc(
  "Admin Manual - 02 Quản lý Users + Roles",
  "SOLUTION_ERP - Admin Manual - 02 Quản lý Users-Roles",
  children,
);

const outPath = path.join(__dirname, 'admin', '02-Quan-ly-Users-Roles.docx');
Packer.toBuffer(doc).then(buf => {
  fs.writeFileSync(outPath, buf);
  console.log('✅ Generated:', outPath);
  console.log('   Size:', (buf.length / 1024).toFixed(1) + ' KB');
});
