/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { Activity, BarChart3, WalletCards } from 'lucide-react' import { useTranslation } from 'react-i18next' import { formatQuota } from '@/lib/format' import { Skeleton } from '@/components/ui/skeleton' import type { UserWalletData } from '../types' interface WalletStatsCardProps { user: UserWalletData | null loading?: boolean } export function WalletStatsCard(props: WalletStatsCardProps) { const { t } = useTranslation() if (props.loading) { return (
{Array.from({ length: 3 }).map((_, i) => (
))}
) } const stats = [ { label: t('Current Balance'), value: formatQuota(props.user?.quota ?? 0), description: t('Remaining quota'), icon: WalletCards, }, { label: t('Total Usage'), value: formatQuota(props.user?.used_quota ?? 0), description: t('Total consumed quota'), icon: BarChart3, }, { label: t('API Requests'), value: (props.user?.request_count ?? 0).toLocaleString(), description: t('Total requests made'), icon: Activity, }, ] return (
{stats.map((item) => (
{item.label}
{item.value}
{item.description}
))}
) }