/** * AssistantSettingsPanel Component * Settings for customizing assistant behavior and preferences */ import React, { useState } from 'react'; import { Settings, X, Save, RotateCcw, Bot, Zap, Shield, Bell, Sliders, MessageSquare, TrendingUp, Clock, Loader2, } from 'lucide-react'; export interface AssistantSettings { // Response preferences responseStyle: 'concise' | 'detailed' | 'technical'; includeCharts: boolean; includeSignals: boolean; autoAnalyze: boolean; // Risk profile riskProfile: 'conservative' | 'moderate' | 'aggressive'; maxPositionSize: number; preferredTimeframes: string[]; // Notification preferences signalNotifications: boolean; analysisNotifications: boolean; priceAlerts: boolean; // Advanced streamResponses: boolean; rememberContext: boolean; maxHistoryMessages: number; } interface AssistantSettingsPanelProps { settings: AssistantSettings; onSave: (settings: AssistantSettings) => Promise; onClose: () => void; isOpen: boolean; } const DEFAULT_SETTINGS: AssistantSettings = { responseStyle: 'detailed', includeCharts: true, includeSignals: true, autoAnalyze: false, riskProfile: 'moderate', maxPositionSize: 2, preferredTimeframes: ['H1', 'H4', 'D1'], signalNotifications: true, analysisNotifications: false, priceAlerts: true, streamResponses: true, rememberContext: true, maxHistoryMessages: 50, }; const TIMEFRAMES = ['M1', 'M5', 'M15', 'M30', 'H1', 'H4', 'D1', 'W1', 'MN']; const AssistantSettingsPanel: React.FC = ({ settings: initialSettings, onSave, onClose, isOpen, }) => { const [settings, setSettings] = useState(initialSettings); const [isSaving, setIsSaving] = useState(false); const [activeTab, setActiveTab] = useState<'general' | 'risk' | 'notifications' | 'advanced'>('general'); const handleSave = async () => { setIsSaving(true); try { await onSave(settings); onClose(); } catch (error) { console.error('Failed to save settings:', error); } finally { setIsSaving(false); } }; const handleReset = () => { setSettings(DEFAULT_SETTINGS); }; const toggleTimeframe = (tf: string) => { setSettings((prev) => ({ ...prev, preferredTimeframes: prev.preferredTimeframes.includes(tf) ? prev.preferredTimeframes.filter((t) => t !== tf) : [...prev.preferredTimeframes, tf], })); }; if (!isOpen) return null; return (
{/* Header */}

Assistant Settings

Customize your trading assistant

{/* Tabs */}
{[ { id: 'general', label: 'General', icon: Bot }, { id: 'risk', label: 'Risk', icon: Shield }, { id: 'notifications', label: 'Alerts', icon: Bell }, { id: 'advanced', label: 'Advanced', icon: Sliders }, ].map((tab) => ( ))}
{/* Content */}
{/* General Tab */} {activeTab === 'general' && (
{/* Response Style */}
{[ { id: 'concise', label: 'Concise', desc: 'Brief answers' }, { id: 'detailed', label: 'Detailed', desc: 'Full explanations' }, { id: 'technical', label: 'Technical', desc: 'Expert level' }, ].map((style) => ( ))}
{/* Toggles */}
setSettings((prev) => ({ ...prev, includeCharts: v }))} /> setSettings((prev) => ({ ...prev, includeSignals: v }))} /> setSettings((prev) => ({ ...prev, autoAnalyze: v }))} />
)} {/* Risk Tab */} {activeTab === 'risk' && (
{/* Risk Profile */}
{[ { id: 'conservative', label: 'Conservative', color: 'green' }, { id: 'moderate', label: 'Moderate', color: 'yellow' }, { id: 'aggressive', label: 'Aggressive', color: 'red' }, ].map((profile) => ( ))}
{/* Max Position Size */}
setSettings((prev) => ({ ...prev, maxPositionSize: parseFloat(e.target.value), })) } className="w-full" />
0.5% {settings.maxPositionSize}% 10%
{/* Preferred Timeframes */}
{TIMEFRAMES.map((tf) => ( ))}
)} {/* Notifications Tab */} {activeTab === 'notifications' && (
setSettings((prev) => ({ ...prev, signalNotifications: v }))} /> setSettings((prev) => ({ ...prev, analysisNotifications: v }))} /> setSettings((prev) => ({ ...prev, priceAlerts: v }))} />
)} {/* Advanced Tab */} {activeTab === 'advanced' && (
setSettings((prev) => ({ ...prev, streamResponses: v }))} /> setSettings((prev) => ({ ...prev, rememberContext: v }))} /> {/* Max History Messages */}

Older messages will be summarized to save context

)}
{/* Footer */}
); }; // Toggle Component interface ToggleProps { label: string; description: string; icon: React.FC<{ className?: string }>; checked: boolean; onChange: (value: boolean) => void; } const Toggle: React.FC = ({ label, description, icon: Icon, checked, onChange, }) => (

{label}

{description}

); export default AssistantSettingsPanel;