import type { UserModel } from '@/utils/types/User';

export function fullName(user: Pick<UserModel, 'first_name' | 'last_name' | 'name' | 'email'>): string {
  const composed = `${user.first_name ?? ''} ${user.last_name ?? ''}`.trim();
  return composed || user.name || user.email || '—';
}

export function getInitials(user: Pick<UserModel, 'first_name' | 'last_name' | 'name' | 'email'>): string {
  const name = fullName(user);
  if (name === '—') return '?';
  const parts = name.split(/\s+/).filter(Boolean);
  if (parts.length >= 2) {
    return (parts[0][0] + parts[1][0]).toUpperCase();
  }
  return name.slice(0, 2).toUpperCase();
}

export type AccountTypeMeta = { label: string; className: string };

export function accountTypeMeta(accountTypeId?: number, fallback?: string): AccountTypeMeta {
  switch (accountTypeId) {
    case 1:
      return { label: 'Admin', className: 'border-violet-200 bg-violet-50 text-violet-700' };
    case 2:
      return { label: 'Brand', className: 'border-blue-200 bg-blue-50 text-blue-700' };
    case 3:
      return { label: 'Influencer', className: 'border-emerald-200 bg-emerald-50 text-emerald-700' };
    default:
      return { label: fallback || 'User', className: 'border-gray-200 bg-gray-50 text-gray-600' };
  }
}

export function statusMeta(isActive: boolean): AccountTypeMeta {
  return isActive
    ? { label: 'Active', className: 'border-green-200 bg-green-50 text-green-700' }
    : { label: 'Inactive', className: 'border-amber-200 bg-amber-50 text-amber-700' };
}

export function formatDateTime(value?: string | null): string {
  if (!value) return '—';
  try {
    return new Date(value).toLocaleDateString('en-US', {
      year: 'numeric',
      month: 'short',
      day: 'numeric',
      hour: '2-digit',
      minute: '2-digit',
    });
  } catch {
    return value;
  }
}

/** Avatar color derived deterministically from the user id (no Math.random). */
export function avatarTint(id: number): string {
  const tints = [
    'bg-violet-100 text-violet-700',
    'bg-blue-100 text-blue-700',
    'bg-emerald-100 text-emerald-700',
    'bg-amber-100 text-amber-700',
    'bg-rose-100 text-rose-700',
    'bg-cyan-100 text-cyan-700',
    'bg-indigo-100 text-indigo-700',
  ];
  return tints[id % tints.length];
}
