export type User = {
  id: string
  email: string
  fullName: string
  isActive: boolean
  isLocked: boolean
  createdAt: string
  roles: string[]
  departmentId: string | null
  departmentName: string | null
  position: string | null
  canBypassReview: boolean
  positionLevel: number | null    // Mig 18 — 1=NV, 2=PP, 3=TP, null=admin/external
}

// Cấp chức danh trong phòng (Mig 18) — phục vụ N-stage workflow inner step.
export const PositionLevel = {
  NhanVien: 1,
  PhoPhong: 2,
  TruongPhong: 3,
} as const
export type PositionLevelValue = typeof PositionLevel[keyof typeof PositionLevel]

export const PositionLevelLabel: Record<number, string> = {
  1: 'NV (Nhân viên)',
  2: 'PP (Phó phòng)',
  3: 'TP (Trưởng phòng)',
}
export const PositionLevelShort: Record<number, string> = {
  1: 'NV',
  2: 'PP',
  3: 'TP',
}

export type CreateUserInput = {
  email: string
  fullName: string
  password: string
  roles: string[]
  departmentId: string | null
  position: string | null
}

// 12 role seed trong BE (AppRoles.cs). Mã + Tên đầy đủ tiếng Việt khớp
// với BE SeedRolesAsync (Role.ShortName + Role.Description).
export const AVAILABLE_ROLES = [
  'Admin',
  'Drafter',
  'DeptManager',
  'ProjectManager',
  'Procurement',
  'CostControl',
  'Finance',
  'Accounting',
  'Equipment',
  'Director',
  'AuthorizedSigner',
  'HrAdmin',
] as const

// Mã viết tắt (Vietnamese abbreviation) — dùng khi không gian hẹp (badge, chip)
export const RoleShortName: Record<string, string> = {
  Admin: 'QTV',
  Drafter: 'NV.PB',
  DeptManager: 'TPB',
  ProjectManager: 'PM',
  Procurement: 'PRO',
  CostControl: 'CCM',
  Finance: 'FIN',
  Accounting: 'ACT',
  Equipment: 'EQU',
  Director: 'BOD',
  AuthorizedSigner: 'NĐUQ',
  HrAdmin: 'HRA',
}

// Tên đầy đủ tiếng Việt — dùng khi rộng rãi (form, list)
export const RoleLabel: Record<string, string> = {
  Admin: 'Quản trị viên hệ thống',
  Drafter: 'Nhân viên phòng ban (soạn HĐ)',
  DeptManager: 'Trưởng phòng ban',
  ProjectManager: 'Giám đốc dự án',
  Procurement: 'Phòng Cung ứng',
  CostControl: 'Phòng Kiểm soát chi phí',
  Finance: 'Phòng Tài chính',
  Accounting: 'Phòng Kế toán',
  Equipment: 'Phòng Thiết bị',
  Director: 'Ban Giám đốc',
  AuthorizedSigner: 'Người được Ủy quyền ký HĐ',
  HrAdmin: 'Phòng Nhân sự - Hành chính',
}

// Combined display: "BOD — Ban Giám đốc"
export function roleDisplayName(roleName: string): string {
  const short = RoleShortName[roleName]
  const full = RoleLabel[roleName]
  if (short && full) return `${short} — ${full}`
  return full ?? roleName
}
