import { useMemo } from "react"; import { useTranslation } from "react-i18next"; import { Card, CardContent } from "@/components/ui/card"; import { useUsageSummary } from "@/lib/query/usage"; import { Activity, DollarSign, Layers, Database, Loader2 } from "lucide-react"; import { motion } from "framer-motion"; interface UsageSummaryCardsProps { days: number; } export function UsageSummaryCards({ days }: UsageSummaryCardsProps) { const { t } = useTranslation(); const { startDate, endDate } = useMemo(() => { const end = Math.floor(Date.now() / 1000); const start = end - days * 24 * 60 * 60; return { startDate: start, endDate: end }; }, [days]); const { data: summary, isLoading } = useUsageSummary(startDate, endDate); const stats = useMemo(() => { const totalRequests = summary?.totalRequests ?? 0; const totalCost = parseFloat(summary?.totalCost || "0"); const inputTokens = summary?.totalInputTokens ?? 0; const outputTokens = summary?.totalOutputTokens ?? 0; const totalTokens = inputTokens + outputTokens; const cacheWriteTokens = summary?.totalCacheCreationTokens ?? 0; const cacheReadTokens = summary?.totalCacheReadTokens ?? 0; const totalCacheTokens = cacheWriteTokens + cacheReadTokens; return [ { title: t("usage.totalRequests", "总请求数"), value: totalRequests.toLocaleString(), icon: Activity, color: "text-blue-500", bg: "bg-blue-500/10", subValue: null, }, { title: t("usage.totalCost", "总成本"), value: `$${totalCost.toFixed(4)}`, icon: DollarSign, color: "text-green-500", bg: "bg-green-500/10", subValue: null, }, { title: t("usage.totalTokens", "总 Token 数"), value: totalTokens.toLocaleString(), icon: Layers, color: "text-purple-500", bg: "bg-purple-500/10", subValue: (
{stat.title}