interface DisplayableUser {
  name?: string | null;
  email?: string | null;
  initials?: string | null;
}

/** Best label for a user: trimmed name, falling back to email, then to a dash. */
export function displayName(user: DisplayableUser): string {
  return user.name?.trim() || user.email?.trim() || "—";
}

/** Best initials for an avatar: provided initials, else derived from name/email. */
export function displayInitials(user: DisplayableUser): string {
  if (user.initials?.trim()) return user.initials.trim().slice(0, 2).toUpperCase();
  const source = user.name?.trim() || user.email?.trim() || "";
  if (!source) return "?";
  const parts = source.split(/[\s@.]+/).filter(Boolean);
  if (parts.length >= 2) return (parts[0][0] + parts[1][0]).toUpperCase();
  return source.slice(0, 2).toUpperCase();
}
