'use client'; import { useState, useEffect } from 'react'; interface Position { symbol: string; side: string; size: number; entryPrice: number; currentPrice: number; unrealizedPnl: number; notionalValue: number; } interface StopLossProximity { stopLossPrice: number; currentPrice: number; distancePercent: string; isNear: boolean; } interface MonitorData { hasPosition: boolean; position?: Position; stopLossProximity?: StopLossProximity; riskLevel: string; nextAction: string; recommendation: string; } interface AutomationStatus { isActive: boolean; mode: string; symbol: string; timeframes: string[]; totalCycles: number; totalTrades: number; lastActivity: string; consecutiveErrors: number; detailedStatus: string; } export default function PositionMonitor() { const [monitorData, setMonitorData] = useState(null); const [automationStatus, setAutomationStatus] = useState(null); const [lastUpdate, setLastUpdate] = useState(new Date()); const [error, setError] = useState(''); const fetchData = async () => { try { // Fetch position data const positionResponse = await fetch('/api/automation/position-monitor'); const positionResult = await positionResponse.json(); // Fetch automation status const statusResponse = await fetch('/api/automation/status'); const statusResult = await statusResponse.json(); if (positionResult.success) { setMonitorData(positionResult.monitor); } setAutomationStatus(statusResult); setLastUpdate(new Date()); setError(''); } catch (err) { setError('Failed to fetch monitoring data'); console.error('Monitor error:', err); } }; useEffect(() => { fetchData(); const interval = setInterval(fetchData, 10000); // Update every 10 seconds return () => clearInterval(interval); }, []); const getRiskColor = (risk: string) => { switch (risk) { case 'HIGH': return 'text-red-500'; case 'MEDIUM': return 'text-yellow-500'; case 'LOW': return 'text-green-500'; default: return 'text-gray-500'; } }; const getStopLossStatus = (distancePercent: string) => { const distance = parseFloat(distancePercent); if (distance <= 2) return { icon: '🚨', text: 'DANGER', color: 'text-red-600' }; if (distance <= 5) return { icon: '⚠️', text: 'WARNING', color: 'text-yellow-600' }; if (distance <= 10) return { icon: '🟡', text: 'CAUTION', color: 'text-yellow-500' }; return { icon: '✅', text: 'SAFE', color: 'text-green-500' }; }; if (error) { return (
{error}
); } return (
{/* Header */}

🔍 Position Monitor

Last update: {lastUpdate.toLocaleTimeString()}
{/* Position Status */} {monitorData?.hasPosition && monitorData.position ? (

📊 Active Position

Symbol & Side

{monitorData.position.symbol} | {monitorData.position.side.toUpperCase()}

Size

{monitorData.position.size} SOL

Entry Price

${monitorData.position.entryPrice.toFixed(4)}

Current Price

${monitorData.position.currentPrice.toFixed(4)}

P&L

= 0 ? 'text-green-600' : 'text-red-600'}`}> {monitorData.position.unrealizedPnl >= 0 ? '+' : ''}${monitorData.position.unrealizedPnl.toFixed(2)}

Notional Value

${monitorData.position.notionalValue.toFixed(2)}

{/* Stop Loss Section */} {monitorData.stopLossProximity && (

🛡️ Stop Loss Protection

Stop Loss Price

${monitorData.stopLossProximity.stopLossPrice.toFixed(4)}

Distance

{monitorData.stopLossProximity.distancePercent}% away

Status

{(() => { const status = getStopLossStatus(monitorData.stopLossProximity.distancePercent); return (

{status.icon} {status.text}

); })()}

Risk Level

{monitorData.riskLevel}

{monitorData.stopLossProximity.isNear && (

🚨 ALERT: Price is near stop loss!

)}
)}
) : (

📊 No Open Positions

Scanning for opportunities...

)} {/* Automation Status */}

🤖 Automation Status

{automationStatus?.isActive ? (

Status

✅ ACTIVE

Mode

{automationStatus.mode}

Strategy

Scalping

Symbol

{automationStatus.symbol}

Timeframes

{automationStatus.timeframes?.join(', ') || 'N/A'}

Cycles

{automationStatus.totalCycles}

Trades

{automationStatus.totalTrades}

Errors

0 ? 'text-yellow-600' : 'text-green-600'}`}> {automationStatus.consecutiveErrors}/3

{automationStatus.lastActivity && (

Last Activity

{new Date(automationStatus.lastActivity).toLocaleString()}

)}
) : (

❌ STOPPED

{automationStatus?.detailedStatus}

)}
); }