import React from 'react'; import type { ReviewStatus, AgentName, AgentStatus } from '../types'; import { AGENT_NAMES } from '../constants'; import { LegalIcon } from './icons/LegalIcon'; import { BrandIcon } from './icons/BrandIcon'; import { CopyIcon } from './icons/CopyIcon'; import { CheckCircleIcon, ExclamationTriangleIcon, InformationCircleIcon } from './icons/StatusIcons'; import { ChannelIcon } from './icons/ChannelIcon'; import { BestPracticeIcon } from './icons/BestPracticeIcon'; import { SpinnerIcon } from './icons/SpinnerIcon'; interface StatusDashboardProps { status: ReviewStatus; variant?: 'default' | 'hero'; } interface StatusInfoProps { status: string; isHeroVariant?: boolean; } // FIX: Storing components instead of instantiated elements to avoid React.cloneElement type issues. // Fix: Removed 'Best Practice' as it does not exist on AgentName type. const agentIcons: Record>> = { 'Legal Agent': LegalIcon, 'Brand Agent': BrandIcon, 'Tone Agent': CopyIcon, 'Channel Agent': ChannelIcon, }; const StatusInfo: React.FC = ({ status, isHeroVariant = false }) => { const colors = isHeroVariant ? { complete: 'text-green-300', issues: 'text-yellow-300', error: 'text-red-300', pending: 'text-gray-400' } : { complete: 'text-green-600', issues: 'text-yellow-600', error: 'text-red-600', pending: 'text-gray-500' }; switch (status) { case 'complete': return
Pass
; case 'issues-found': return
Issues Found
; case 'error': return
Error
; default: return
Pending
; } }; export const StatusDashboard: React.FC = ({ status, variant = 'default' }) => { if (Object.keys(status).length === 0) return null; const isHeroVariant = variant === 'hero'; const getTileClassName = (agentStatus: AgentStatus, isHero: boolean): string => { const baseClasses = 'rounded-lg flex flex-col text-center transition-colors duration-500 ease-in-out'; if (isHero) { const heroBase = `${baseClasses} p-4`; switch (agentStatus) { case 'complete': return `${heroBase} bg-green-400/20`; case 'issues-found': return `${heroBase} bg-yellow-400/20`; case 'error': return `${heroBase} bg-red-400/20`; default: // 'pending' or 'in-progress' return `${heroBase} bg-white/10`; } } else { const defaultBase = `${baseClasses} p-6 shadow-lg border`; switch (agentStatus) { case 'complete': return `${defaultBase} bg-green-50 border-green-200`; case 'issues-found': return `${defaultBase} bg-yellow-50 border-yellow-200`; case 'error': return `${defaultBase} bg-red-50 border-red-200`; default: // 'pending' or 'in-progress' return `${defaultBase} bg-gray-50 border-gray-200`; } } }; return (

Review Progress

{AGENT_NAMES.map((agentName) => { const agentStatus = status[agentName] || 'pending'; const iconColor = isHeroVariant ? 'text-brand-light-blue' : 'text-brand-accent'; const Icon = agentIcons[agentName]; return (

{agentName}

{agentStatus === 'in-progress' ? (
Analyzing...
) : ( )}
); })}
); };