import React, { useEffect, useState } from 'react' import { HoverCard, HoverCardContent, HoverCardTrigger } from "@/components/ui/hover-card" import { MapPin, Building2, Globe, Briefcase, GraduationCap, Link, Users, Calendar, Lightbulb, Loader2, ExternalLink } from 'lucide-react' import { getUser } from '@services/users/users' import { useLHSession } from '@components/Contexts/LHSessionContext' import { Button } from '@/components/ui/button' import { Badge } from '@/components/ui/badge' import { useRouter } from 'next/navigation' type UserProfilePopupProps = { children: React.ReactNode userId: string } type UserData = { first_name: string last_name: string username: string bio?: string avatar_image?: string details?: { [key: string]: { id: string label: string icon: string text: string } } } const ICON_MAP = { 'briefcase': Briefcase, 'graduation-cap': GraduationCap, 'map-pin': MapPin, 'building-2': Building2, 'speciality': Lightbulb, 'globe': Globe, 'link': Link, 'users': Users, 'calendar': Calendar, } as const const UserProfilePopup = ({ children, userId }: UserProfilePopupProps) => { const session = useLHSession() as any const router = useRouter() const [userData, setUserData] = useState(null) const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState(null) useEffect(() => { const fetchUserData = async () => { if (!userId) return setIsLoading(true) setError(null) try { const data = await getUser(userId, session?.data?.tokens?.access_token) setUserData(data) } catch (err) { setError('Failed to load user data') console.error('Error fetching user data:', err) } finally { setIsLoading(false) } } fetchUserData() }, [userId, session?.data?.tokens?.access_token]) const IconComponent = ({ iconName }: { iconName: string }) => { const IconElement = ICON_MAP[iconName as keyof typeof ICON_MAP] if (!IconElement) return null return } return ( {children} {isLoading ? (
) : error ? (
{error}
) : userData ? (
{/* Header with Avatar and Name */}
{/* Background gradient */}
{/* Content */}
{/* Avatar */}
{children}
{/* Name, Bio, and Button */}

{userData.first_name} {userData.last_name}

{userData.username && ( @{userData.username} )}
{userData.bio && (

{userData.bio}

)}
{/* Details */} {userData.details && Object.values(userData.details).length > 0 && (
{Object.values(userData.details).map((detail) => (
{detail.label} {detail.text}
))}
)}
) : null} ) } export default UserProfilePopup