import { useState, useEffect } from 'react' import { useUser } from '../context/UserContext' import { getActivityLog } from '../api' const actionLabels = { server_start: 'Server gestartet', server_stop: 'Server gestoppt', server_restart: 'Server neugestartet', rcon_command: 'RCON Befehl', autoshutdown_config: 'Auto-Shutdown geändert', zomboid_config: 'Config geändert', factorio_world_create: 'Welt erstellt', factorio_world_delete: 'Welt gelöscht' } const actionIcons = { server_start: '▶️', server_stop: '⏹️', server_restart: '🔄', rcon_command: '💻', autoshutdown_config: '⏱️', zomboid_config: '📝', factorio_world_create: '🌍', factorio_world_delete: '🗑️' } const serverLabels = { minecraft: 'Minecraft', factorio: 'Factorio', zomboid: 'Project Zomboid', vrising: 'V Rising' } function getAvatarUrl(discordId, avatar) { if (!discordId || !avatar) return null return `https://cdn.discordapp.com/avatars/${discordId}/${avatar}.png?size=32` } function getDiscordProfileUrl(discordId) { return `https://discord.com/users/${discordId}` } export default function ActivityLog({ onClose }) { const { token } = useUser() const [logs, setLogs] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState('') useEffect(() => { const fetchLogs = async () => { try { const data = await getActivityLog(token, 100) setLogs(data) setError('') } catch (err) { setError('Fehler beim Laden des Activity Logs') } finally { setLoading(false) } } fetchLogs() }, [token]) const formatDate = (dateStr) => { const date = new Date(dateStr + 'Z') const now = new Date() const diff = now - date if (diff < 60000) return 'Gerade eben' if (diff < 3600000) return Math.floor(diff / 60000) + ' Min' if (diff < 86400000) return Math.floor(diff / 3600000) + ' Std' return date.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', hour: '2-digit', minute: '2-digit' }) } return (
e.stopPropagation()}>

Activity Log

{error && (
{error}
)} {loading ? (
Laden...
) : logs.length === 0 ? (
Noch keine Aktivitäten
) : (
{logs.map((log) => { const avatarUrl = getAvatarUrl(log.discord_id, log.avatar) const profileUrl = log.discord_id ? getDiscordProfileUrl(log.discord_id) : null return (
{/* Avatar or Action Icon */} {avatarUrl ? ( ) : (
{log.username?.charAt(0)?.toUpperCase()}
)}
{profileUrl ? ( {log.username} ) : ( {log.username} )} {actionIcons[log.action] || '📋'} {actionLabels[log.action] || log.action} {log.target && ( {serverLabels[log.target] || log.target} )}
{log.details && (
{log.details}
)}
{formatDate(log.created_at)}
) })}
)}
) }