'use client' import React, { useState, useEffect } from 'react' export default function TradeExecutionPanel({ analysis, symbol = 'SOL' }) { const [tradeType, setTradeType] = useState('BUY') const [amount, setAmount] = useState('') const [customPrice, setCustomPrice] = useState('') const [useRecommendedPrice, setUseRecommendedPrice] = useState(true) const [isExecuting, setIsExecuting] = useState(false) const [executionResult, setExecutionResult] = useState(null) const [balance, setBalance] = useState(null) // Get recommended price from analysis const getRecommendedPrice = () => { if (!analysis) return null if (analysis.recommendation === 'BUY' && analysis.entry?.price) { return analysis.entry.price } else if (analysis.recommendation === 'SELL' && analysis.entry?.price) { return analysis.entry.price } return null } const recommendedPrice = getRecommendedPrice() // Fetch balance on component mount useEffect(() => { fetchBalance() }, []) const fetchBalance = async () => { try { const response = await fetch('/api/trading/balance') const data = await response.json() if (data.success) { setBalance(data.balance) } } catch (error) { console.error('Failed to fetch balance:', error) } } const executeTrade = async () => { if (!amount || parseFloat(amount) <= 0) { alert('Please enter a valid amount') return } setIsExecuting(true) setExecutionResult(null) try { const tradePrice = useRecommendedPrice && recommendedPrice ? recommendedPrice : customPrice ? parseFloat(customPrice) : undefined const response = await fetch('/api/trading/execute', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ symbol, side: tradeType, amount: parseFloat(amount), price: tradePrice, orderType: tradePrice ? 'limit' : 'market' }) }) const result = await response.json() if (result.success) { setExecutionResult({ success: true, trade: result.trade, message: result.message }) // Refresh balance after successful trade await fetchBalance() } else { setExecutionResult({ success: false, error: result.error, message: result.message }) } } catch (error) { setExecutionResult({ success: false, error: 'Network error', message: 'Failed to execute trade. Please try again.' }) } finally { setIsExecuting(false) } } const getTradeButtonColor = () => { if (tradeType === 'BUY') return 'bg-green-600 hover:bg-green-700' return 'bg-red-600 hover:bg-red-700' } const getRecommendationColor = () => { if (!analysis) return 'text-gray-400' switch (analysis.recommendation) { case 'BUY': return 'text-green-400' case 'SELL': return 'text-red-400' default: return 'text-yellow-400' } } return (