import React, { useState, useEffect } from 'react'; import './Options.css'; import useSSE from './useSSE'; const Options = () => { const [message, setMessage] = useState(''); const [messageType, setMessageType] = useState('info'); const [isSettingWaypoints, setIsSettingWaypoints] = useState(false); const [settings, setSettings] = useState({ cargo: '', max_warp_speed: '', max_subwarp_speed: '', risk_cost: '', ship_cost: '', tax_rate: '', profit_threshold: '', max_capital: '', snipe_profit_threshold: '' }); const { data: sseData } = useSSE('http://localhost:8000/data_stream'); const route = Array.isArray(sseData?.route) ? sseData.route : []; const hasRouteWaypoints = route.length > 1; useEffect(() => { fetch('http://localhost:8000/settings') .then(res => res.json()) .then(data => { setSettings({ cargo: data.cargo, max_warp_speed: data.max_warp_speed, max_subwarp_speed: data.max_subwarp_speed, risk_cost: data.risk_cost, ship_cost: data.ship_cost, tax_rate: data.tax_rate, profit_threshold: data.profit_threshold, max_capital: data.max_capital, snipe_profit_threshold: data.snipe_profit_threshold }); }) .catch(err => console.error("Error fetching settings", err)); }, []); const handleSettingsChange = (e) => { const { name, value } = e.target; setSettings(prev => ({ ...prev, [name]: value })); }; const handleSaveSettings = async () => { try { const response = await fetch('http://localhost:8000/settings', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ cargo: Number(settings.cargo), max_warp_speed: Number(settings.max_warp_speed), max_subwarp_speed: Number(settings.max_subwarp_speed), risk_cost: Number(settings.risk_cost), ship_cost: Number(settings.ship_cost), tax_rate: Number(settings.tax_rate), profit_threshold: Number(settings.profit_threshold), max_capital: Number(settings.max_capital), snipe_profit_threshold: Number(settings.snipe_profit_threshold) }) }); if (response.ok) { setMessageType('success'); setMessage('Settings saved'); setTimeout(() => setMessage(''), 3000); } } catch (error) { setMessageType('error'); setMessage(`Error: ${error.message}`); } }; const handleCreateRoute = async () => { try { await fetch('http://localhost:8000/create_route', { method: 'POST' }); } catch (error) { setMessage(`Error: ${error}`); } }; const handleSetWaypoints = async () => { if (!hasRouteWaypoints) { setMessageType('error'); setMessage('No route exists'); return; } setIsSettingWaypoints(true); setMessageType('info'); setMessage('Sending to EVE...'); try { const response = await fetch('http://localhost:8000/set_waypoints', { method: 'POST' }); const resData = await response.json(); const nextMessage = resData.message || resData.status || 'Waypoint request completed'; const nextType = resData.success ? 'success' : resData.status === 'partial' ? 'warning' : 'error'; setMessageType(nextType); setMessage(nextMessage); if (resData.success) { setTimeout(() => setMessage(''), 4000); } } catch (error) { setMessageType('error'); setMessage(`Error: ${error}`); } finally { setIsSettingWaypoints(false); } }; const messageClassName = messageType === 'error' ? 'mb-1 text-red-400' : messageType === 'warning' ? 'mb-1 text-yellow-300' : 'mb-1 text-green-400'; const waypointButtonClassName = hasRouteWaypoints && !isSettingWaypoints ? 'options-button flex-1 px-2 py-1 text-sm bg-green-700 hover:bg-green-600 text-white rounded' : 'options-button flex-1 px-2 py-1 text-sm bg-green-900 text-white rounded opacity-50 cursor-not-allowed'; return (
{message}
}