import Link from "next/link"; import { Activity, RefreshCcw, Settings2, Wifi } from "lucide-react"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import type { DashboardBalanceSummary } from "@/features/dashboard/types/dashboard.types"; import { formatCurrency, formatPercent, getChangeToneClass, } from "@/features/dashboard/utils/dashboard-format"; import { cn } from "@/lib/utils"; interface StatusHeaderProps { summary: DashboardBalanceSummary | null; isKisRestConnected: boolean; isWebSocketReady: boolean; isRefreshing: boolean; lastUpdatedAt: string | null; onRefresh: () => void; } /** * @description 대시보드 상단 상태 헤더(총자산/손익/연결상태/빠른액션) 컴포넌트입니다. * @see features/dashboard/components/DashboardContainer.tsx 대시보드 루트에서 상태 값을 전달받아 렌더링합니다. */ export function StatusHeader({ summary, isKisRestConnected, isWebSocketReady, isRefreshing, lastUpdatedAt, onRefresh, }: StatusHeaderProps) { const toneClass = getChangeToneClass(summary?.totalProfitLoss ?? 0); const updatedLabel = lastUpdatedAt ? new Date(lastUpdatedAt).toLocaleTimeString("ko-KR", { hour12: false, }) : "--:--:--"; return ( {/* ========== BACKGROUND DECORATION ========== */}
{/* ========== TOTAL ASSET ========== */}

총 자산

{summary ? `${formatCurrency(summary.totalAmount)}원` : "-"}

예수금 {summary ? `${formatCurrency(summary.cashBalance)}원` : "-"}

{/* ========== PROFIT/LOSS ========== */}

실시간 손익

{summary ? `${formatCurrency(summary.totalProfitLoss)}원` : "-"}

{summary ? formatPercent(summary.totalProfitRate) : "-"}

{/* ========== CONNECTION STATUS ========== */}

시스템 상태

REST {isKisRestConnected ? "연결됨" : "연결 끊김"} WS {isWebSocketReady ? "준비됨" : "미연결"}

마지막 갱신 {updatedLabel}

{/* ========== QUICK ACTIONS ========== */}
); }