import React from "react"; import { UserCheck, UserX, MapPin, Activity } from "lucide-react"; import { useTranslation } from "react-i18next"; interface LoginRecord { user: string; ip: string; time: string; status: "success" | "failed"; } interface LoginStatsMetrics { recentLogins: LoginRecord[]; failedLogins: LoginRecord[]; totalLogins: number; uniqueIPs: number; } interface ServerMetrics { login_stats?: LoginStatsMetrics; } interface LoginStatsWidgetProps { metrics: ServerMetrics | null; metricsHistory: ServerMetrics[]; } export function LoginStatsWidget({ metrics, }: LoginStatsWidgetProps) { const { t } = useTranslation(); const loginStats = metrics?.login_stats; const recentLogins = loginStats?.recentLogins || []; const failedLogins = loginStats?.failedLogins || []; const totalLogins = loginStats?.totalLogins || 0; const uniqueIPs = loginStats?.uniqueIPs || 0; return (

{t("serverStats.loginStats")}

{t("serverStats.totalLogins")}
{totalLogins}
{t("serverStats.uniqueIPs")}
{uniqueIPs}
{t("serverStats.recentSuccessfulLogins")}
{recentLogins.length === 0 ? (
{t("serverStats.noRecentLoginData")}
) : (
{recentLogins.slice(0, 5).map((login, idx) => (
{login.user} {t("serverStats.from")} {login.ip}
{new Date(login.time).toLocaleString()}
))}
)}
{failedLogins.length > 0 && (
{t("serverStats.recentFailedAttempts")}
{failedLogins.slice(0, 3).map((login, idx) => (
{login.user} {t("serverStats.from")} {login.ip}
{new Date(login.time).toLocaleString()}
))}
)}
); }