'use client'; import { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { RefreshCw, User, Clock, Globe } from 'lucide-react'; import { format } from 'date-fns'; interface ActivityLog { id: string; action: string; entityType: string; entityId?: string; details?: string; ipAddress?: string; userAgent?: string; createdAt: Date; user?: { id: string; name: string; surname: string; email: string; } | null; } export function AdminLogs() { const [logs, setLogs] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchLogs(); }, []); const fetchLogs = async () => { try { setLoading(true); const response = await fetch('/api/admin/logs?limit=50'); if (response.ok) { const data = await response.json(); setLogs(data.logs || []); } else { console.error('Failed to fetch logs'); } } catch (error) { console.error('Error fetching logs:', error); } finally { setLoading(false); } }; const getActionBadgeColor = (action: string) => { switch (action.toLowerCase()) { case 'create': case 'created': return 'bg-green-100 text-green-800'; case 'update': case 'updated': return 'bg-blue-100 text-blue-800'; case 'delete': case 'deleted': return 'bg-red-100 text-red-800'; case 'login': return 'bg-purple-100 text-purple-800'; case 'logout': return 'bg-gray-100 text-gray-800'; default: return 'bg-gray-100 text-gray-800'; } }; const formatUserAgent = (userAgent?: string) => { if (!userAgent) return 'Unknown'; if (userAgent.includes('Chrome')) return 'Chrome'; if (userAgent.includes('Firefox')) return 'Firefox'; if (userAgent.includes('Safari')) return 'Safari'; if (userAgent.includes('Edge')) return 'Edge'; return 'Unknown Browser'; }; if (loading) { return ( Activity Logs
{[1, 2, 3, 4, 5].map((i) => (
))}
); } return ( Activity Logs {logs.length === 0 ? (
No activity logs found.
) : (
{logs.map((log) => (
{log.action} {log.entityType} {log.entityId && ( ({log.entityId.substring(0, 8)}...) )}
{format(new Date(log.createdAt), 'MMM dd, HH:mm')}
{log.user ? ( {log.user.name} {log.user.surname} ({log.user.email}) ) : ( System/Anonymous )}
{log.ipAddress && (
{log.ipAddress} {formatUserAgent(log.userAgent)}
)}
{log.details && (
											{JSON.stringify(JSON.parse(log.details), null, 2)}
										
)}
))}
)}
); }