'use client' import Link from 'next/link' import { useRouter } from 'next/navigation' import { useEffect, useMemo, useRef, useState } from 'react' import { ChevronDown, Loader2, LogOut, Settings, Sprout, Tractor, UserCircle } from 'lucide-react' import type { User } from 'firebase/auth' import { signOutUser } from '@/src/lib/auth' type AccountMenuProps = { user: User | null loading?: boolean } function getAccountName(user: User | null) { return user?.displayName?.trim() || user?.email?.split('@')[0]?.trim() || 'CropIntel user' } function getInitials(name: string, email: string) { const source = name !== 'CropIntel user' ? name : email const parts = source .replace(/@.*/, '') .split(/[\s._-]+/) .filter(Boolean) if (parts.length === 0) return 'CI' return parts .slice(0, 2) .map((part) => part[0]?.toUpperCase()) .join('') } export default function AccountMenu({ user, loading = false }: AccountMenuProps) { const router = useRouter() const menuRef = useRef(null) const [open, setOpen] = useState(false) const [signingOut, setSigningOut] = useState(false) const email = user?.email?.trim() || 'No email on file' const name = getAccountName(user) const initials = useMemo(() => getInitials(name, email), [name, email]) useEffect(() => { if (!open) return const handlePointerDown = (event: PointerEvent) => { if (!menuRef.current?.contains(event.target as Node)) { setOpen(false) } } const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') setOpen(false) } document.addEventListener('pointerdown', handlePointerDown) document.addEventListener('keydown', handleKeyDown) return () => { document.removeEventListener('pointerdown', handlePointerDown) document.removeEventListener('keydown', handleKeyDown) } }, [open]) const handleSignOut = async () => { setSigningOut(true) try { await signOutUser() router.replace('/login') } finally { setSigningOut(false) setOpen(false) } } if (loading) { return (
) } return (
{open && (

{name}

{email}

Profile My Farms Settings
{!user && (
Account details are not available yet.
)}
)}
) }