import { userInitials, userPhotoUrl, type UserAvatarSource } from '@admin/lib/user-avatar-url';
import { cn } from '@admin/lib/utils';

const sizeClasses = {
    sm: 'h-8 w-8 text-xs',
    md: 'h-10 w-10 text-sm',
    lg: 'h-16 w-16 text-lg',
} as const;

type UserAvatarProps = {
    user: UserAvatarSource;
    size?: keyof typeof sizeClasses;
    onPrimary?: boolean;
    className?: string;
    ringClassName?: string;
};

export function UserAvatar({
    user,
    size = 'sm',
    onPrimary = false,
    className,
    ringClassName,
}: UserAvatarProps) {
    const photo = userPhotoUrl(user);
    const sizeClass = sizeClasses[size];

    if (photo) {
        return (
            <img
                src={photo}
                alt={user.name}
                className={cn(
                    'inline-block rounded-full object-cover',
                    sizeClass,
                    ringClassName ?? 'ring-2 ring-white dark:ring-white/10',
                    className,
                )}
            />
        );
    }

    return (
        <span
            className={cn(
                'admin-user-avatar-initials inline-flex shrink-0 items-center justify-center rounded-full font-semibold',
                onPrimary && 'admin-user-avatar-initials--on-primary',
                sizeClass,
                ringClassName ?? 'ring-2 ring-white',
                className,
            )}
            aria-hidden
        >
            {userInitials(user.name)}
        </span>
    );
}
