"use client"; import { ArrowLeftRight, DoorOpen, Eye, MessageSquare, Pencil, Shield, Wifi, WifiOff, } from "lucide-react"; import { useSearchParams } from "next/navigation"; import { useTranslations } from "next-intl"; import { AdminBreadcrumb } from "@/components/admin/admin-breadcrumb"; import { UserWatchToggle } from "@/components/admin/user-watch-toggle"; import Link from "@/components/link"; import { CurrencyIcon } from "@/components/shared/currency-icon"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { formatNumber } from "@/lib/format-date"; import { getAvatarUrl } from "@/lib/imager"; import { userDetailHref, userListHref } from "../user-list-navigation"; 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; canViewLogs?: 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, canViewLogs = true, }: UserHeroProps) { const t = useTranslations("pages.admin.users.presentation"); const params = useSearchParams(); const list = params.get("list") ?? ""; const listHref = userListHref(list); 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 || t("rank", { rank: user.rank })} {isOnline ? ( <> {t("online")} ) : ( <> {t("offline")} )} {activeBan && {t("banned")}} {user.twoFactorConfirmed ? ( 2FA ) : null}
{/* Currency row */}
{formatNumber(user.credits)} {t("credits")}
{formatNumber(diamonds)} {t("diamonds")}
{formatNumber(duckets)} {t("duckets")}
{formatNumber(user.pixels)} {t("pixels")}
{/* Quick stats cards */}

{roomCount}

{t("rooms")}

{canViewLogs && (

{formatNumber(chatCount)}

{t("messages")}

)} {canViewLogs && (

{tradeCount}

{t("trades")}

)}
); }