import React, { useState } from 'react'; import { FiClock, FiMessageSquare, FiCheckCircle, FiUser, FiBarChart2, FiInfo, FiZap } from 'react-icons/fi'; const RiskCard = ({ student, spaceName, onResolve, onGetContext, formatOfflineTime }) => { const [showBreakdown, setShowBreakdown] = useState(false); const score = student.metadata?.score || 0; const level = student.level || (score >= 6 ? 'critical' : score >= 3 ? 'warning' : 'safe'); const signals = student.metadata?.signal_details || student.metadata?.signals || {}; const absencePoints = signals.absence_points || 0; const stuckPoints = signals.stuck_points || 0; const quizAvg = signals.quiz_avg_score !== undefined ? signals.quiz_avg_score : null; // Score breakdown from 3 sources - use nullish coalescing for missing fields const breakdown = student.score_breakdown || {}; const lastSeenNormalized = breakdown.last_seen_normalized ?? 0; const fastApiNormalized = breakdown.fastapi_normalized ?? 0; const quizNormalized = breakdown.quiz_normalized ?? 0; const riskColor = level === 'critical' ? 'var(--ta-red)' : level === 'warning' ? 'var(--ta-amber)' : 'var(--ta-green)'; const riskLabel = level === 'critical' ? 'Nghiêm trọng' : level === 'warning' ? 'Cần chú ý' : 'An toàn'; const getScoreBarColor = (value, type) => { // Color gradient: green (low risk) → yellow → red (high risk) if (value < 3) return 'var(--ta-green)'; if (value < 6) return 'var(--ta-amber)'; return 'var(--ta-red)'; }; return (