import React from "react"; import { Accordion, AccordionDetails, AccordionSummary, Box, Card, CardContent, Chip, Stack, Typography, } from "@mui/material"; import { Cancel, CheckCircle, ExpandMore, WifiTethering } from "@mui/icons-material"; import type { RSSVerification } from "../types"; interface Props { verifications: RSSVerification[]; } function formatRelativeTime(timestamp: string): string { if (!timestamp) return "unknown time"; try { const date = new Date(timestamp); if (isNaN(date.getTime())) return timestamp; const diffMs = Date.now() - date.getTime(); const diffMins = Math.floor(diffMs / 60000); if (diffMins < 1) return "just now"; if (diffMins < 60) return `${diffMins} minute${diffMins !== 1 ? "s" : ""} ago`; const diffHours = Math.floor(diffMins / 60); if (diffHours < 24) return `${diffHours} hour${diffHours !== 1 ? "s" : ""} ago`; const diffDays = Math.floor(diffHours / 24); return `${diffDays} day${diffDays !== 1 ? "s" : ""} ago`; } catch { return timestamp; } } function RSSVerificationPanel({ verifications }: Props): React.ReactElement | null { if (verifications.length === 0) return null; const anyVerified = verifications.some((v) => v.verified); const anyContradicted = verifications.some((v) => !v.verified); const iconColor = anyContradicted ? "warning.main" : anyVerified ? "success.main" : "text.secondary"; return ( }> RSS Stream Verification {verifications.map((v, i) => ( : } label={v.verified ? "Confirmed" : "Contradicted"} size="small" color={v.verified ? "success" : "error"} /> {formatRelativeTime(v.timestamp)} {v.matched_entity} "{v.headline}" ))} ); } export default RSSVerificationPanel;