import { useState, useEffect, useCallback } from 'react'; import { useTranslation } from 'react-i18next'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Skeleton } from '@/components/ui/skeleton'; import { Badge } from '@/components/ui/badge'; import { Wallet, ArrowDownToLine, ArrowUpFromLine, RefreshCw, Lock, Unlock } from 'lucide-react'; import { getInternalBalances, type InternalBalance } from '@shared/lib/p2p-fiat'; import { useP2PIdentity } from '@/contexts/P2PIdentityContext'; interface InternalBalanceCardProps { onDeposit?: () => void; onWithdraw?: () => void; } export function InternalBalanceCard({ onDeposit, onWithdraw }: InternalBalanceCardProps) { const { t } = useTranslation(); const { userId } = useP2PIdentity(); const [balances, setBalances] = useState([]); const [isLoading, setIsLoading] = useState(true); const [isRefreshing, setIsRefreshing] = useState(false); const fetchBalances = useCallback(async () => { if (!userId) return; try { const data = await getInternalBalances(userId); setBalances(data); } catch (error) { console.error('Failed to fetch balances:', error); } finally { setIsLoading(false); setIsRefreshing(false); } }, [userId]); useEffect(() => { fetchBalances(); }, [fetchBalances]); const handleRefresh = async () => { setIsRefreshing(true); await fetchBalances(); }; const formatBalance = (value: number, decimals: number = 2) => { return value.toLocaleString(undefined, { minimumFractionDigits: decimals, maximumFractionDigits: decimals }); }; if (isLoading) { return (
); } return (
{t('p2pBalance.title')}

{t('p2pBalance.subtitle')}

{balances.length === 0 ? (

{t('p2pBalance.noBalance')}

{t('p2pBalance.depositToStart')}

) : ( balances.map((balance) => (
{balance.token.charAt(0)}
{balance.token}
{t('p2pBalance.total', { amount: formatBalance(balance.total_balance) })}

{t('p2pBalance.available')}

{formatBalance(balance.available_balance)}

{t('p2pBalance.lockedEscrow')}

{formatBalance(balance.locked_balance)}

{t('p2pBalance.totalDeposited')} {formatBalance(balance.total_deposited)}
{t('p2pBalance.totalWithdrawn')} {formatBalance(balance.total_withdrawn)}
)) )} {/* Action Buttons */}
); }