'use client'; import { useState, useEffect } from 'react'; import { useAuth } from '@/contexts/AuthContext'; import { Users, Shield, Database, Activity, AlertCircle, CheckCircle, Server, } from 'lucide-react'; import { statsAPI, auditLogsAPI } from '@/lib/api/admin'; import LoadingSpinner from '@/components/LoadingSpinner'; export default function AdminDashboard() { const { user } = useAuth(); const [stats, setStats] = useState<{ totalUsers: number; activeUsers: number; inactiveUsers: number; loginsToday: number } | null>(null); const [recentLogs, setRecentLogs] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { async function load() { setLoading(true); try { const [s, logsRes] = await Promise.all([ statsAPI.get(), auditLogsAPI.getAll({ pageSize: 10, page: 1 }), ]); setStats(s); setRecentLogs(logsRes.data || []); } catch { // ignore } finally { setLoading(false); } } load(); }, []); const getActionLabel = (a: string) => { const labels: Record = { CREATE: 'قام بإنشاء', UPDATE: 'قام بتحديث', DELETE: 'قام بحذف', ACTIVATE: 'قام بتفعيل', DEACTIVATE: 'قام بتعطيل', }; return labels[a] || a; }; const formatTime = (d: string | null | undefined) => { if (!d) return '-'; const diff = Date.now() - new Date(d).getTime(); const mins = Math.floor(diff / 60000); const hours = Math.floor(diff / 3600000); if (mins < 60) return `منذ ${mins} دقيقة`; if (hours < 24) return `منذ ${hours} ساعة`; return new Date(d).toLocaleString('ar-SA', { dateStyle: 'short', timeStyle: 'short' }); }; if (loading) { return (
); } const statCards = [ { icon: Users, label: 'إجمالي المستخدمين', value: stats?.totalUsers ?? '0', change: stats ? `+${stats.activeUsers} نشط` : '-', color: 'bg-blue-500', }, { icon: Shield, label: 'الأدوار النشطة', value: '-', change: 'من الأدوار', color: 'bg-purple-500', }, { icon: Database, label: 'آخر نسخة احتياطية', value: 'قريباً', change: 'تلقائي يومياً', color: 'bg-green-500', }, { icon: Activity, label: 'تسجيل الدخول اليوم', value: String(stats?.loginsToday ?? 0), change: 'مستخدم', color: 'bg-teal-500', }, ]; const systemAlerts: { type: 'info' | 'warning'; message: string; time: string }[] = [ { type: 'info', message: 'النسخ الاحتياطي والتصدير ستكون متاحة قريباً', time: '-', }, ]; return (

لوحة تحكم المدير

مرحباً {user?.username}، إليك نظرة عامة على النظام

{/* Stats Grid */}
{statCards.map((stat, index) => { const Icon = stat.icon; return (

{stat.value}

{stat.label}

{stat.change}

); })}
{/* System Alerts */}

تنبيهات النظام

{systemAlerts.map((alert, index) => (
{alert.type === 'warning' ? ( ) : ( )}

{alert.message}

{alert.time}

))}
{/* Recent Activities */}

النشاطات الأخيرة

{recentLogs.length === 0 ? (

لا توجد نشاطات حديثة

) : ( recentLogs.map((log) => (

{log.user?.username || 'نظام'}{' '} {getActionLabel(log.action)} {log.entityType}

{formatTime(log.createdAt)}

)) )}
{/* System Status */}

حالة الخدمات

{[ { name: 'قاعدة البيانات', status: 'operational', uptime: '99.99%' }, { name: 'خادم التطبيق', status: 'operational', uptime: '99.95%' }, { name: 'خدمة البريد', status: 'قريباً', uptime: '-' }, ].map((service, index) => (

{service.name}

Uptime: {service.uptime}

))}
{/* Quick Actions */}

إدارة المستخدمين

إضافة وتعديل المستخدمين

الأدوار والصلاحيات

إدارة صلاحيات المستخدمين

سجل العمليات

عرض وتتبع العمليات

); }