import { AlertTriangle, CheckCircle, XCircle, AlertCircle, Sparkles } from 'lucide-react'; import { AnalysisData } from '../types/analysis'; import { Progress } from './ui/progress'; import { Badge } from './ui/badge'; import { StatisticsBar } from './StatisticsBar'; interface OverviewPanelProps { data: AnalysisData; } export function OverviewPanel({ data }: OverviewPanelProps) { const getSeverityBadgeClass = (severity: string) => { switch (severity) { case 'critical': return 'bg-red-500/10 text-red-400 border border-red-500/20'; case 'high': return 'bg-orange-500/10 text-orange-400 border border-orange-500/20'; case 'medium': return 'bg-amber-500/10 text-amber-400 border border-amber-500/20'; case 'low': return 'bg-indigo-500/10 text-indigo-400 border border-indigo-500/20'; default: return 'bg-slate-500/10 text-slate-400 border border-slate-500/20'; } }; const getRiskIcon = () => { switch (data.riskLevel) { case 'critical': return ; case 'high': return ; case 'medium': return ; default: return ; } }; const getRiskColor = () => { switch (data.riskLevel) { case 'critical': return 'from-rose-500/10 via-rose-500/5 to-transparent border-rose-500/30'; case 'high': return 'from-orange-500/10 via-orange-500/5 to-transparent border-orange-500/30'; case 'medium': return 'from-amber-500/10 via-amber-500/5 to-transparent border-amber-500/30'; default: return 'from-emerald-500/10 via-emerald-500/5 to-transparent border-emerald-500/30'; } }; const severityCounts = data.darkPatterns.reduce((acc, pattern) => { acc[pattern.severity] = (acc[pattern.severity] || 0) + 1; return acc; }, {} as Record); const avgConfidence = data.darkPatterns.length > 0 ? Math.round(data.darkPatterns.reduce((sum, p) => sum + p.confidence, 0) / data.darkPatterns.length) : 0; return (
{/* Statistics Bar */} {/* Overall Risk Score */}
{getRiskIcon()}

Platform Trust Score: {data.overallScore}/100

Calculated Risk Rating:{' '} {data.riskLevel}

{data.darkPatterns.length}
Violations Found
{/* Pattern Types Detected */}

Detected Deceptive Categories

{data.darkPatterns.length > 0 ? (
{Array.from(new Set(data.darkPatterns.map((p) => p.type))).map((type) => { const pattern = data.darkPatterns.find((p) => p.type === type); return ( {type} ); })}
) : (

No deceptive categories detected. Fully compliant!

)}
{/* Quick Summary */}

🤖 Explainable AI (XAI) Summary

{data.darkPatterns.length > 0 ? ( <> This interface contains {data.darkPatterns.length} dark patterns flagged by the NLP vector classifiers. Common patterns include {Array.from(new Set(data.darkPatterns.map(p => p.type))).slice(0, 3).join(', ')}. The platform trust rating of {data.overallScore}/100 indicates a{' '} {data.riskLevel} risk of regulatory non-compliance with the Consumer Financial Protection Bureau (CFPB) guidelines. ) : ( <> This interface is clean! The NLP model scanned all textual and layout layers and did not detect any cognitive friction, forced continuity, hidden costs, or urgency tactics. The trust score of{' '} {data.overallScore}/100 indicates alignment with CFPB consumer protection policies. )}

); }