"use client" import React, { useEffect, useState } from 'react' export default function StatusOverview() { const [status, setStatus] = useState({ portfolioValue: 0, activeTrades: 0, dailyPnL: 0, systemStatus: 'offline', marketPrices: [], walletBalance: null, availableCoins: [] }) const [loading, setLoading] = useState(true) // Coin icons mapping - using CoinGecko images const coinIcons = { 'BTC': 'https://assets.coingecko.com/coins/images/1/large/bitcoin.png', 'ETH': 'https://assets.coingecko.com/coins/images/279/large/ethereum.png', 'SOL': 'https://assets.coingecko.com/coins/images/4128/large/solana.png', 'SOL-USD': 'https://assets.coingecko.com/coins/images/4128/large/solana.png' } useEffect(() => { async function fetchStatus() { try { setLoading(true) // Get real wallet balance let walletBalance = null let availableCoins = [] try { const walletRes = await fetch('/api/wallet/balance') if (walletRes.ok) { const walletData = await walletRes.json() if (walletData.success) { walletBalance = walletData.balance availableCoins = walletData.balance.positions || [] } } } catch (e) { console.warn('Could not fetch wallet balance:', e) } // Get market data - only BTC, ETH, SOL let marketPrices = [] try { const marketRes = await fetch('/api/market') if (marketRes.ok) { const marketData = await marketRes.json() if (marketData.success) { // Filter to only show BTC, ETH, SOL const targetCoins = ['BTC', 'ETH', 'SOL'] marketPrices = (marketData.data.prices || []) .filter(price => targetCoins.includes(price.symbol)) .sort((a, b) => targetCoins.indexOf(a.symbol) - targetCoins.indexOf(b.symbol)) } } } catch (e) { console.warn('Could not fetch market data:', e) } // Get system status let systemStatus = 'online' try { const statusRes = await fetch('/api/status') if (!statusRes.ok) { systemStatus = 'error' } } catch (e) { systemStatus = 'error' } setStatus({ portfolioValue: walletBalance?.totalValue || 0, activeTrades: 0, dailyPnL: 0, systemStatus: systemStatus, marketPrices: marketPrices, walletBalance: walletBalance, availableCoins: availableCoins }) } catch (error) { console.error('Error fetching status:', error) setStatus(prev => ({ ...prev, systemStatus: 'error' })) } setLoading(false) } fetchStatus() // Refresh every 30 seconds const interval = setInterval(fetchStatus, 30000) return () => clearInterval(interval) }, []) const statusColor = { online: 'text-green-400', offline: 'text-yellow-400', error: 'text-red-400' } const statusIcon = { online: '🟢', offline: '🟡', error: '🔴' } if (loading) { return (
Portfolio Value
${status.portfolioValue.toFixed(2)}
Wallet Balance
{status.walletBalance.positions?.[0]?.amount?.toFixed(4) || '0.0000'} SOL
Active Trades
{status.activeTrades}
Daily P&L
= 0 ? 'text-green-400' : 'text-red-400'}`}> {status.dailyPnL >= 0 ? '+' : ''}${status.dailyPnL.toFixed(2)}