import React from 'react'; import { Box, Card, CardContent, Typography, LinearProgress, Stack, Skeleton, } from '@mui/material'; import Grid from '@mui/material/GridLegacy'; import { Error as ErrorIcon, Warning as WarningIcon, Info as InfoIcon, CheckCircle as CheckCircleIcon, Refresh as RefreshIcon, Block as BlockIcon, } from '@mui/icons-material'; import { WebDAVScanFailureStats } from '../../services/api'; import { modernTokens } from '../../theme'; interface StatsDashboardProps { stats: WebDAVScanFailureStats; isLoading?: boolean; } interface StatCardProps { title: string; value: number; icon: React.ElementType; color: string; bgColor: string; description?: string; percentage?: number; trend?: 'up' | 'down' | 'stable'; } const StatCard: React.FC = ({ title, value, icon: Icon, color, bgColor, description, percentage, }) => ( {value.toLocaleString()} {title} {description && ( {description} )} {percentage !== undefined && ( {percentage.toFixed(1)}% of total )} ); const StatsDashboard: React.FC = ({ stats, isLoading }) => { if (isLoading) { return ( {[1, 2, 3, 4, 5, 6].map((i) => ( ))} ); } const totalFailures = stats.active_failures + stats.resolved_failures; const criticalPercentage = totalFailures > 0 ? (stats.critical_failures / totalFailures) * 100 : 0; const highPercentage = totalFailures > 0 ? (stats.high_failures / totalFailures) * 100 : 0; const mediumPercentage = totalFailures > 0 ? (stats.medium_failures / totalFailures) * 100 : 0; const lowPercentage = totalFailures > 0 ? (stats.low_failures / totalFailures) * 100 : 0; const retryPercentage = stats.active_failures > 0 ? (stats.ready_for_retry / stats.active_failures) * 100 : 0; return ( Scan Failure Statistics {/* Total Active Failures */} {/* Critical Failures */} {/* High Priority Failures */} {/* Medium Priority Failures */} {/* Low Priority Failures */} {/* Ready for Retry */} {/* Summary Row */} Success Rate {totalFailures > 0 ? ( <> {((stats.resolved_failures / totalFailures) * 100).toFixed(1)}% {stats.resolved_failures} of {totalFailures} failures resolved ) : ( 100% )} ); }; export default StatsDashboard;