"use client"; import { useEffect, useState } from "react"; import { RefreshCw, AlertTriangle, CheckCircle, XCircle, ShieldAlert } from "lucide-react"; import { AdminLayout } from "@/components/admin/admin-layout"; import { Badge } from "@/components/ui/badge"; import { useLanguage } from "@/components/language-provider"; interface Event { id: string; event_type: string; severity: string; ip_address: string; user_agent: string; user?: { email: string }; metadata: Record; status: string; created_at: string; } const SEVERITY_COLORS: Record = { low: "bg-slate-500/15 text-slate-300", medium: "bg-amber-500/15 text-amber-300", high: "bg-rose-500/15 text-rose-300", critical: "bg-rose-600/20 text-rose-200", }; const SEVERITY_ICONS: Record> = { low: ShieldAlert, medium: AlertTriangle, high: AlertTriangle, critical: XCircle, }; export default function AdminEventsPage() { const { lang } = useLanguage(); const [events, setEvents] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const token = localStorage.getItem("access_token"); if (!token) { window.location.href = "/login?redirect=/admin/events"; return; } const fetchData = async () => { const baseURL = process.env.NEXT_PUBLIC_API_URL; try { const res = await fetch(`${baseURL}/security/events/`, { headers: { Authorization: `Bearer ${token}` }, }); const data = await res.json(); setEvents(data.results || []); } catch (e) { console.error(e); } finally { setLoading(false); } }; fetchData(); }, []); const t = (fa: string, en: string) => (lang === "fa" ? fa : en); if (loading) { return (
); } return (

{t("رویدادهای امنیتی", "Security Events")}

{events.map((e) => { const Icon = SEVERITY_ICONS[e.severity] || ShieldAlert; return ( ); })}
{t("زمان", "Time")} {t("رویداد", "Event")} {t("کاربر", "User")} {t("آی\u200cپی", "IP")} {t("شدت", "Severity")}
{new Date(e.created_at).toLocaleString(lang === "fa" ? "fa-IR" : "en-US")} {e.event_type} {e.user?.email || "—"} {e.ip_address} {e.severity}
{events.length === 0 && !loading && (
{t("رویدادی یافت نشد", "No events found")}
)}
); }