'use client' import { useState } from 'react' import Link from 'next/link' import { useRouter } from 'next/navigation' import { IconChartBar as ChartBar, IconLink as Link2, IconLogout as LogOut, IconShield, IconUserCircle as UserRound } from '@tabler/icons-react' import { signOut } from '@/lib/actions/auth' import type { AppUser } from '@/lib/auth/types' import { chatStore } from '@/lib/chat-store' import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger } from '@/components/ui/dropdown-menu' import { AccountSettingsDialog } from '@/components/account-settings-dialog' import { useUsageBudget } from '@/components/usage-budget-provider' import { UsageDialog } from '@/components/usage-dialog' import { Button } from './ui/button' import { ExternalLinkItems } from './external-link-items' interface UserMenuProps { user: AppUser } export default function UserMenu({ user }: UserMenuProps) { const router = useRouter() const [menuOpen, setMenuOpen] = useState(false) const [accountOpen, setAccountOpen] = useState(false) const [usageOpen, setUsageOpen] = useState(false) const { usage, isLow, isExhausted, refreshUsage } = useUsageBudget() const userName = user.name || 'User' const avatarUrl = user.image ?? undefined const getInitials = (name: string, email: string | null | undefined) => { if (name && name !== 'User') { const names = name.split(' ') if (names.length > 1) { return `${names[0][0]}${names[names.length - 1][0]}`.toUpperCase() } return name.substring(0, 2).toUpperCase() } if (email) { return email.split('@')[0].substring(0, 2).toUpperCase() } return 'U' } const handleLogout = async () => { await signOut() chatStore.setUser(null) router.push('/') router.refresh() } const handleOpenAccount = () => { setMenuOpen(false) window.setTimeout(() => setAccountOpen(true), 0) } const handleOpenUsage = () => { setMenuOpen(false) window.setTimeout(() => { setUsageOpen(true) void refreshUsage() }, 0) } const accountMenuLabel = isExhausted ? 'Open account menu. Monthly usage limit reached.' : isLow ? 'Open account menu. Monthly usage is running low.' : 'Open account menu' return ( <>

{userName}

{user.email}

{ event.preventDefault() handleOpenAccount() }} > Account {user.role === 'admin' && ( Admin )} {usage && ( { event.preventDefault() handleOpenUsage() }} > Usage {usage.remaining} / {usage.limit} )} Links Logout
{usage && ( )} ) }