"use client" import React, { useEffect, useState } from 'react' export default function StatusOverview() { const [status, setStatus] = useState({ driftBalance: 0, activeTrades: 0, dailyPnL: 0, systemStatus: 'offline', bitqueryStatus: 'unknown', marketPrices: [] }) const [loading, setLoading] = useState(true) useEffect(() => { async function fetchStatus() { try { setLoading(true) // Get market data from Bitquery let balance = 0 let bitqueryStatus = 'error' let marketPrices = [] try { const marketRes = await fetch('/api/market') if (marketRes.ok) { const marketData = await marketRes.json() if (marketData.success) { marketPrices = marketData.data.prices || [] bitqueryStatus = marketData.data.status?.connected ? 'online' : 'error' // Calculate portfolio value from Bitquery const portfolioRes = await fetch('/api/trading/balance') if (portfolioRes.ok) { const portfolioData = await portfolioRes.json() if (portfolioData.success) { balance = portfolioData.balance.totalValue || 0 } } } } } 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({ driftBalance: balance, activeTrades: 0, // No fake trades - will show real ones when we have them dailyPnL: 0, // No fake P&L systemStatus: systemStatus, bitqueryStatus: bitqueryStatus, marketPrices: marketPrices }) } 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: '🔴' } return (

System Status

{statusIcon[status.systemStatus]} {status.systemStatus.toUpperCase()}
{loading ? (
Loading status...
) : (
{/* Main Status Grid */}
💎

${status.driftBalance.toFixed(2)}

Portfolio Value

🔄

{status.activeTrades}

Active Trades

📈

= 0 ? 'text-green-400' : 'text-red-400'}`}> {status.dailyPnL >= 0 ? '+' : ''}${status.dailyPnL.toFixed(2)}

Daily P&L

{/* Service Status */}

Service Status

Trading Bot
{statusIcon[status.systemStatus]} {status.systemStatus.toUpperCase()}
Bitquery API
{statusIcon[status.bitqueryStatus]} {status.bitqueryStatus.toUpperCase()}
{/* Market Prices */} {status.marketPrices.length > 0 && (

Live Market Prices

Via Bitquery
{status.marketPrices.map((price, index) => (
{price.symbol} ${price.price?.toFixed(4)}
24h Change = 0 ? 'text-green-400' : 'text-red-400' }`}> {price.change24h >= 0 ? '+' : ''}{price.change24h?.toFixed(2)}%
))}
)}
)}
) }