import React from 'react';
import { themedColor } from '../../theme';
import { Image, Text, View } from 'react-native';
import { User } from 'lucide-react-native';
import { SvgXml } from 'react-native-svg';
import { agentAvatarSvg } from './agentAvatarAssets';
import { agentSphereStyles } from './agentSphereStyles';
import type { SuperagentAgent } from '../../types';
const SIZES = { xl: 56, lg: 48, header: 34, md: 30, sm: 24 };
export function AgentSphereIcon({
agent,
isUser = false,
size = 'md',
userAvatarUrl,
}: {
agent?: SuperagentAgent;
isUser?: boolean;
size?: keyof typeof SIZES | number;
userAvatarUrl?: string | null;
}) {
const dimension = typeof size === 'number' ? size : SIZES[size];
const borderRadius = dimension / 2;
const logo = getAgentLogo(agent);
const [userImageFailed, setUserImageFailed] = React.useState(false);
const normalizedUserAvatarUrl = userAvatarUrl?.trim();
React.useEffect(() => {
setUserImageFailed(false);
}, [normalizedUserAvatarUrl]);
if (isUser) {
if (normalizedUserAvatarUrl && !userImageFailed) {
return (
setUserImageFailed(true)}
resizeMode="cover"
source={{ uri: normalizedUserAvatarUrl }}
style={agentSphereStyles.image}
/>
);
}
return (
);
}
if (logo.emoji) {
return (
{logo.emoji}
);
}
if (logo.url) {
return (
);
}
// DS "Agent Avatar" blob (picked by avatarIndex) — a free-form multi-color
// illustration with its own silhouette + transparent margins, so it renders
// directly at `dimension` with no circular frame/background behind it.
return (
);
}
function getAgentLogo(agent?: SuperagentAgent) {
const logoUrl = agent?.logoUrl?.trim();
if (logoUrl?.startsWith('emoji:')) {
return { emoji: logoUrl.replace('emoji:', ''), url: null };
}
return {
emoji: agent?.emoji?.trim() || null,
url: logoUrl || null,
};
}