import React from 'react'; import type { Persona, UserTier, UserBadgeInfo } from '@/lib/ai/types'; import { canAccessPersona, getPersonaAccessReason } from '@/lib/ai/types'; import { PERSONAS, getPersonasByRealm } from '@/lib/ai/personas'; import { getPersonaIcon, ChevronDownIcon } from './Icons'; import { Lock, Award } from 'lucide-react'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; interface PersonaSelectorProps { currentPersona: Persona; onSelectPersona: (persona: Persona) => void; userTier: UserTier; userBadges?: UserBadgeInfo[]; currentRealm?: string; } export const PersonaSelector: React.FC = ({ currentPersona, onSelectPersona, userTier, userBadges = [], currentRealm }) => { const CurrentIcon = getPersonaIcon(currentPersona.icon); const realmPersonas = currentRealm ? getPersonasByRealm(currentRealm) : []; const otherPersonas = PERSONAS.filter(p => !currentRealm || p.realm !== currentRealm); const renderPersonaItem = (persona: Persona) => { const Icon = getPersonaIcon(persona.icon); const accessInfo = getPersonaAccessReason(userTier, persona.requiredTier, userBadges, persona.unlockBadgeSlug); const hasAccess = accessInfo.hasAccess; const isSelected = persona.id === currentPersona.id; const tierBadgeContent = ( {accessInfo.reason === 'badge' && } {persona.requiredTier} ); return ( hasAccess && onSelectPersona(persona)} disabled={!hasAccess} className={`flex items-center gap-3 p-3 cursor-pointer ${ isSelected ? 'bg-primary/10' : '' } ${!hasAccess ? 'opacity-50' : ''}`} >
{persona.name} {!hasAccess && (

Requires {persona.requiredTier} tier {persona.unlockBadgeSlug && ` or "${persona.unlockBadgeSlug.replace(/_/g, ' ')}" badge`}

)} {accessInfo.reason === 'badge' && (

Unlocked with {accessInfo.badgeName} badge

)}

{persona.description}

{persona.requiredTier !== 'Free' && tierBadgeContent}
); }; return ( {realmPersonas.length > 0 && ( <> Suggested for this realm {realmPersonas.map(renderPersonaItem)} )} All Agents {otherPersonas.map(renderPersonaItem)} ); };