import { CheckCircle2, XCircle, MapPin, Camera, Cpu, Scan, AlertCircle, Info } from 'lucide-react'; interface MetadataInspectorProps { metadata?: { camera: string; gps: string; lens: string; software: string; dimensions: string; }; } type BadgeState = 'present' | 'missing' | 'ai' | 'info'; function getBadgeState(key: string, value: string): BadgeState { if (!value || value === 'NONE' || value === '') return 'missing'; const v = value.toLowerCase(); const aiKeywords = ['stable diffusion', 'midjourney', 'dall', 'firefly', 'comfy', 'automatic1111', 'flux', 'ai']; if (key === 'software' && aiKeywords.some(k => v.includes(k))) return 'ai'; if (key === 'gps' && v === 'present') return 'present'; return 'present'; } const BADGE_CONFIG: Record }> = { present: { color: '#22c55e', bgColor: 'rgba(34,197,94,0.1)', icon: CheckCircle2 }, missing: { color: '#94a3b8', bgColor: 'rgba(148,163,184,0.1)', icon: XCircle }, ai: { color: '#ef4444', bgColor: 'rgba(239,68,68,0.12)', icon: AlertCircle }, info: { color: '#0ea5e9', bgColor: 'rgba(14,165,233,0.1)', icon: Info }, }; const FIELD_ICONS: Record> = { camera: Camera, gps: MapPin, lens: Scan, software: Cpu, }; const FIELD_LABELS: Record = { camera: 'Camera Hardware', gps: 'GPS Location Data', lens: 'Lens Model', software: 'Processing Software', }; const FIELD_NOTES: Record = { camera: 'AI images have no camera make/model', gps: 'Real photos often embed GPS coordinates', lens: 'Real cameras embed lens EXIF data', software: 'AI tools embed their name in EXIF', }; export default function MetadataInspector({ metadata }: MetadataInspectorProps) { if (!metadata) return null; const fields = ['camera', 'gps', 'lens', 'software'] as const; return (
{/* Header */}
EXIF Metadata Guard {metadata.dimensions && ( {metadata.dimensions} )}
{fields.map(key => { const value = metadata[key]; const state = getBadgeState(key, value); const cfg = BADGE_CONFIG[state]; const Icon = FIELD_ICONS[key] || Camera; const StatusIcon = cfg.icon; return (
{/* Icon */}
{/* Label + note */}
{FIELD_LABELS[key]}
{state === 'missing' ? 'SIGNAL MISSING' : value}
{/* Badge */}
); })}
{/* Forensic note */}
FORENSIC NOTE: {" "}Camera make/model is a primary indicator. Missing GPS or shutter speed data is common in web-optimized images but remains a diagnostic factor.
); }