import { useState, useEffect } from 'react' import { Terminal, Play, CheckCircle, AlertCircle } from 'lucide-react' import { api } from '../lib/api' import { useDarkMode } from '../context/ThemeContext' interface LiveLogEntry { id: string timestamp: string level: 'info' | 'warning' | 'error' | 'success' message: string source: string } export default function LiveLogSection() { const [logs, setLogs] = useState([]) const [currentJob, setCurrentJob] = useState(null) const { theme } = useDarkMode() useEffect(() => { const fetchJobs = async () => { try { const response = await api.get('/jobs') const jobs = response.data const current = jobs.find((j: any) => j.status === 'processing') setCurrentJob(current || jobs.find((j: any) => j.status === 'pending')) } catch (error) { console.error('Fehler beim Laden der Jobs:', error) } } const fetchLogs = async () => { try { const response = await api.get('/logs', { params: { limit: 50 } }) setLogs(response.data) } catch (error) { console.error('Fehler beim Laden der Logs:', error) } } fetchJobs() fetchLogs() const jobInterval = setInterval(fetchJobs, 5000) const logInterval = setInterval(fetchLogs, 5000) return () => { clearInterval(jobInterval) clearInterval(logInterval) } }, []) const getStatusColor = (level: string) => { switch (level) { case 'error': return 'text-rose-500' case 'warning': return 'text-amber-500' case 'success': return 'text-emerald-500' default: return 'text-blue-500' } } const getStatusIcon = (level: string) => { switch (level) { case 'error': return case 'warning': return case 'success': return default: return } } return (

Live-Log

{currentJob ? `Aktiver Job: ${currentJob.type.toUpperCase()} (${currentJob.progress}%)` : 'Kein aktiver Job'}

{currentJob && (
{currentJob.progress === 100 ? : } {currentJob.progress}%
)}
{logs.length === 0 ? (

Warte auf Log-Einträge...

) : ( logs.map((log) => (
{new Date(log.timestamp).toLocaleTimeString('de-DE', { hour12: false })} [{log.source}] {log.message} {getStatusIcon(log.level)}
)) )}
{/* Quick Stats */}
{currentJob && ( <>

Fortschritt

{currentJob.progress}%

Gerät

{currentJob.device || 'Unbekannt'}

Typ

{currentJob.type?.toUpperCase() || 'Unbekannt'}

)}
) }