import { useState, useEffect } from 'react' import { useAdminConfig } from '../hooks/useAdminConfig' import { useAuth } from '../context/AuthContext' import { useCustomers } from '../hooks/useCustomers' import { useEmployees } from '../hooks/useEmployees' import { FaPlus, FaTrash, FaFloppyDisk, FaSpinner } from 'react-icons/fa6' import { FaEdit } from 'react-icons/fa' export default function AdminPage() { const { user, isAdmin } = useAuth() const { config, loading, error, updateConfig } = useAdminConfig() const { customers, loading: customersLoading, createCustomer, updateCustomer, deleteCustomer, refresh: refreshCustomers } = useCustomers() const { employees, loading: employeesLoading, createEmployee, updateEmployee, deleteEmployee, refresh: refreshEmployees } = useEmployees() const [localConfig, setLocalConfig] = useState(() => { // Initialisiere mit Default-Werten falls config noch nicht geladen if (config && Object.keys(config).length > 0) { return config } return { ticketTypes: [], systems: [], responseLevels: [], serviceTypes: [], priorities: [] } }) const [saving, setSaving] = useState(false) const [saveMessage, setSaveMessage] = useState('') const [editingCustomer, setEditingCustomer] = useState(null) const [customerForm, setCustomerForm] = useState({ code: '', name: '', location: '', email: '', phone: '' }) const [editingEmployee, setEditingEmployee] = useState(null) const [employeeForm, setEmployeeForm] = useState({ userId: '', displayName: '', email: '', shortcode: '' }) const [adminSection, setAdminSection] = useState('config') // Update localConfig when config loads useEffect(() => { if (config && Object.keys(config).length > 0) { setLocalConfig(config) } }, [config]) if (!isAdmin) { return (

Zugriff verweigert

Du hast keine Berechtigung, auf diese Seite zuzugreifen.

) } const handleAddItem = (field) => { setLocalConfig(prev => ({ ...prev, [field]: [...prev[field], field === 'priorities' ? { value: prev[field].length, label: 'New' } : 'New Item'] })) } const handleRemoveItem = (field, index) => { setLocalConfig(prev => ({ ...prev, [field]: prev[field].filter((_, i) => i !== index) })) } const handleUpdateItem = (field, index, value) => { setLocalConfig(prev => { const newArray = [...prev[field]] if (field === 'priorities') { newArray[index] = { ...newArray[index], ...value } } else { newArray[index] = value } return { ...prev, [field]: newArray } }) } const handleSave = async () => { setSaving(true) setSaveMessage('') const result = await updateConfig(localConfig) if (result.success) { setSaveMessage('Konfiguration erfolgreich gespeichert!') setTimeout(() => setSaveMessage(''), 3000) } else { setSaveMessage('Fehler beim Speichern: ' + (result.error || 'Unbekannter Fehler')) } setSaving(false) } if (loading && !config) { return (

Lade Konfiguration...

) } return (

Admin Panel - Dropdown Konfiguration

{error && (
Fehler: {error}
)} {saveMessage && (
{saveMessage}
)}
{[ { id: 'config', label: 'Konfiguration' }, { id: 'customers', label: 'Kunden' }, { id: 'employees', label: 'Mitarbeiter' }, ].map((section) => ( ))}
{adminSection === 'config' && ( <>
{/* Ticket Types */}

Work Order Types

{localConfig.ticketTypes?.map((type, index) => (
handleUpdateItem('ticketTypes', index, e.target.value)} style={{ flex: 1 }} />
))}
{/* Systems */}

Affected Systems

{localConfig.systems?.map((system, index) => (
handleUpdateItem('systems', index, e.target.value)} style={{ flex: 1 }} />
))}
{/* Response Levels */}

Response Levels

{localConfig.responseLevels?.map((level, index) => (
handleUpdateItem('responseLevels', index, e.target.value)} style={{ flex: 1 }} />
))}
{/* Service Types */}

Service Types

{localConfig.serviceTypes?.map((type, index) => (
handleUpdateItem('serviceTypes', index, e.target.value)} style={{ flex: 1 }} />
))}
{/* Priorities */}

Priorities

{localConfig.priorities?.map((priority, index) => (
handleUpdateItem('priorities', index, { ...priority, value: parseInt(e.target.value) })} style={{ width: '100px' }} placeholder="Value" /> handleUpdateItem('priorities', index, { ...priority, label: e.target.value })} style={{ flex: 1 }} placeholder="Label" />
))}
)} {adminSection === 'customers' && (

Kunden

{customersLoading ? (
Lade Kunden...
) : ( <> {customers.map((customer) => ( {editingCustomer === customer.$id ? ( <> ) : ( <> )} ))}
Code Name Location Email Phone Aktionen
setCustomerForm(prev => ({ ...prev, code: e.target.value }))} style={{ width: '100px' }} /> setCustomerForm(prev => ({ ...prev, name: e.target.value }))} /> setCustomerForm(prev => ({ ...prev, location: e.target.value }))} /> setCustomerForm(prev => ({ ...prev, email: e.target.value }))} /> setCustomerForm(prev => ({ ...prev, phone: e.target.value }))} /> {customer.code || '-'} {customer.name || '-'} {customer.location || '-'} {customer.email || '-'} {customer.phone || '-'}

Neuen Kunden hinzufügen

setCustomerForm(prev => ({ ...prev, code: e.target.value }))} placeholder="C001" />
setCustomerForm(prev => ({ ...prev, name: e.target.value }))} placeholder="Kundenname" required />
setCustomerForm(prev => ({ ...prev, location: e.target.value }))} placeholder="Stadt" />
setCustomerForm(prev => ({ ...prev, email: e.target.value }))} placeholder="email@example.com" />
setCustomerForm(prev => ({ ...prev, phone: e.target.value }))} placeholder="030-123456" />
)}
)} {adminSection === 'employees' && (

Mitarbeiter & Kürzel

{employeesLoading ? (
Lade Mitarbeiter...
) : ( <> {employees.length === 0 ? (

Noch keine Mitarbeiter in der Liste

Sobald sich Benutzer einloggen, werden sie automatisch hier angezeigt.

) : ( {employees.map((employee) => ( {editingEmployee === employee.$id ? ( <> ) : ( <> )} ))}
Name Email Kürzel User ID Aktionen
{employee.displayName || '-'} {employee.email || '-'} setEmployeeForm(prev => ({ ...prev, shortcode: e.target.value.toUpperCase() }))} placeholder="KNSO" style={{ width: '100px' }} maxLength={10} autoFocus /> {employee.userId.substring(0, 12)}... {employee.displayName || '-'} {employee.email || '-'} {employee.shortcode || '(kein Kürzel)'} {employee.userId.substring(0, 12)}...
)} )}
)}
) }