"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 (
Loading overview...
) } return (
{/* System Status Header */}

System Status

{statusIcon[status.systemStatus]} Trading Bot {status.systemStatus.toUpperCase()}
{/* Portfolio Overview - Combined Section */}
💎

Portfolio Value

${status.portfolioValue.toFixed(2)}

{status.walletBalance && (
SOL

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)}

{/* Available Wallet Coins */} {status.availableCoins.length > 0 && (

Available Coins

{status.availableCoins.map((coin, index) => (
{coinIcons[coin.symbol] ? ( {coin.symbol} ) : ( 🪙 )}
{coin.symbol}
${coin.price?.toFixed(2)}
{coin.amount?.toFixed(4)}
${coin.usdValue?.toFixed(2)}
))}
)}
{/* Live Market Prices - BTC, ETH, SOL only */} {status.marketPrices.length > 0 && (

Live Market Prices

Real-time data
{status.marketPrices.map((price, index) => (
{coinIcons[price.symbol] ? ( {price.symbol} ) : ( 🪙 )} {price.symbol}
${price.price?.toFixed(2)}
24h Change = 0 ? 'text-green-400 bg-green-400/10' : 'text-red-400 bg-red-400/10' }`}> {price.change24h >= 0 ? '+' : ''}{price.change24h?.toFixed(2)}%
))}
)}
) }