import React, { useState } from 'react'; import { useAuth } from '../contexts/AuthContext'; import PluginManager from './PluginManager'; export interface SettingsModalProps { open: boolean; onClose: () => void; } type SettingsTab = 'personal' | 'password' | 'language' | 'theme' | 'users' | 'plugins' | 'ai'; const SettingsModal: React.FC = ({ open, onClose }) => { const { user } = useAuth(); const [activeTab, setActiveTab] = useState('personal'); const [displayName, setDisplayName] = useState(user?.name || ''); const [oldPassword, setOldPassword] = useState(''); const [newPassword, setNewPassword] = useState(''); const [confirmPassword, setConfirmPassword] = useState(''); const [language, setLanguage] = useState('de'); const [themeMode, setThemeMode] = useState<'light' | 'dark'>('dark'); const [accentColor, setAccentColor] = useState('#2563eb'); const [aiProvider, setAiProvider] = useState('openrouter'); const [aiModel, setAiModel] = useState('gpt-4o'); const [aiApiKey, setAiApiKey] = useState(''); const [pwMessage, setPwMessage] = useState(''); if (!open) return null; const isAdmin = user?.role === 'admin'; const initials = (user?.name || '?').split(' ').map(w => w[0]).join('').slice(0, 2).toUpperCase(); const tabs: Array<{ id: SettingsTab; label: string; adminOnly?: boolean }> = [ { id: 'personal', label: 'Persönlich' }, { id: 'password', label: 'Passwort' }, { id: 'language', label: 'Sprache' }, { id: 'theme', label: 'Theme' }, { id: 'users', label: 'Benutzer', adminOnly: true }, { id: 'plugins', label: 'Plugins', adminOnly: true }, { id: 'ai', label: 'KI' }, ]; const visibleTabs = tabs.filter(t => !t.adminOnly || isAdmin); const handlePasswordChange = () => { if (!oldPassword || !newPassword || !confirmPassword) { setPwMessage('Bitte alle Felder ausfüllen.'); return; } if (newPassword !== confirmPassword) { setPwMessage('Neue Passwörter stimmen nicht überein.'); return; } if (newPassword.length < 6) { setPwMessage('Passwort muss mindestens 6 Zeichen lang sein.'); return; } setPwMessage('Passwort erfolgreich geändert.'); setOldPassword(''); setNewPassword(''); setConfirmPassword(''); }; const renderTabContent = () => { switch (activeTab) { case 'personal': return (
setDisplayName(e.target.value)} />
{initials}
); case 'password': return (
setOldPassword(e.target.value)} /> setNewPassword(e.target.value)} /> setConfirmPassword(e.target.value)} /> {pwMessage &&
{pwMessage}
}
); case 'language': return (
); case 'theme': return (
setAccentColor(e.target.value)} /> {accentColor}
); case 'users': return (
Benutzerverwaltung
LM
Leopold M.
admin@example.com
Admin
); case 'plugins': return (
); case 'ai': return (
setAiApiKey(e.target.value)} placeholder="••••••••••••" />
); default: return null; } }; return (
e.stopPropagation()}>
{visibleTabs.map((tab) => ( ))}
{renderTabContent()}
); }; export default SettingsModal;