import { ArrowLeftRight, DoorOpen, Eye, MessageSquare, Pencil, Shield, Wifi, WifiOff, } from "lucide-react"; import Link from "next/link"; import { AdminBreadcrumb } from "@/components/admin/admin-breadcrumb"; import { UserWatchToggle } from "@/components/admin/user-watch-toggle"; import { CurrencyIcon } from "@/components/shared/currency-icon"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { getAvatarUrl } from "@/lib/imager"; interface UserHeroProps { user: { id: number; username: string; motto: string; look: string; rank: number; credits: number; pixels: number; online: string; permission: { rankName: string }; twoFactorConfirmed: number; }; diamonds: number; duckets: number; roomCount: number; chatCount: number; tradeCount: number; isOnline: boolean; activeBan: boolean; mode: "show" | "edit"; canEdit: boolean; /** When non-null, render the watch toggle with this initial state. */ watching?: boolean | null; } export function UserHero({ user, diamonds, duckets, roomCount, chatCount, tradeCount, isOnline, activeBan, mode, canEdit, watching, }: UserHeroProps) { return ( <>
{/* Avatar */}
{user.username} {isOnline && ( )}
{/* Info */}

{user.username}

ID: {user.id} {/* Mode switch buttons */} {mode === "show" && canEdit && ( )} {mode === "edit" && ( )} {watching != null && ( )}
{user.motto && (

“{user.motto}”

)}
{user.permission.rankName || `Rank ${user.rank}`} {isOnline ? ( <> Online ) : ( <> Offline )} {activeBan && Banned} {user.twoFactorConfirmed ? ( 2FA ) : null}
{/* Currency row */}
{user.credits.toLocaleString()} credits
{diamonds.toLocaleString()} diamonds
{duckets.toLocaleString()} duckets
{user.pixels.toLocaleString()} pixels
{/* Quick stats cards */}

{roomCount}

Rooms

{chatCount.toLocaleString()}

Messages

{tradeCount}

Trades

); }