import type { IUser } from '../types';

/** Khóa quyền đồng bộ với backend `Role.permissions` và UI RBAC */
export const PERMISSION = {
  view_dashboard: 'view_dashboard',
  manage_assets: 'manage_assets',
  manage_users: 'manage_users',
  view_finance: 'view_finance',
  approve_tickets: 'approve_tickets',
  config_system: 'config_system',
} as const;

export type PermissionKey = (typeof PERMISSION)[keyof typeof PERMISSION];

/** Chuỗi role hiển thị trên user (tránh populate object). */
function userRoleDisplay(user: IUser): string {
  const r = user.role as unknown;
  if (typeof r === 'string') return r.trim();
  if (r && typeof r === 'object' && 'name' in (r as object)) {
    return String((r as { name?: string }).name ?? '').trim();
  }
  return '';
}

/**
 * Quản trị hệ thống (role code ADMIN hoặc vai trò "System Administrator").
 * Dùng cho thao tác chỉ admin được phép (ví dụ xóa phiếu từ O&M Dashboard).
 */
export function isSystemAdministrator(user: IUser | null | undefined): boolean {
  if (!user) return false;
  if (user.roleCode?.toUpperCase() === 'ADMIN') return true;
  return userRoleDisplay(user).toLowerCase() === 'system administrator';
}

export function hasPermission(user: IUser | null | undefined, key: string): boolean {
  if (!user) return false;
  if (isSystemAdministrator(user)) return true;
  return user.rolePermissions?.[key] === true;
}

export function hasAnyPermission(user: IUser | null | undefined, keys: string[]): boolean {
  if (!user || keys.length === 0) return false;
  return keys.some((k) => hasPermission(user, k));
}
