import { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import { AlertTriangle, Clock, Hash, Ticket, Loader2, RefreshCw } from 'lucide-react' import { aiSessionsApi } from '@/api' import type { AISessionSummary } from '@/types/ai-session' import { timeAgo } from '@/lib/timeAgo' interface EscalationQueueProps { onPickup?: (sessionId: string) => void onCountChange?: (count: number) => void } function waitTimeColor(createdAt: string): string { const hours = (Date.now() - new Date(createdAt).getTime()) / 3_600_000 if (hours >= 4) return '#f87171' // danger if (hours >= 1) return '#fbbf24' // warning/amber return '#848b9b' // muted } export function EscalationQueue({ onPickup, onCountChange }: EscalationQueueProps) { const navigate = useNavigate() const [sessions, setSessions] = useState([]) const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState(null) const loadQueue = async () => { setIsLoading(true) setError(null) try { const data = await aiSessionsApi.getEscalationQueue() // Sort oldest-first — longest waiting = most urgent const sorted = [...data].sort( (a, b) => new Date(a.created_at).getTime() - new Date(b.created_at).getTime() ) setSessions(sorted) onCountChange?.(sorted.length) } catch { setError('Failed to load escalation queue') } finally { setIsLoading(false) } } useEffect(() => { loadQueue() // eslint-disable-next-line react-hooks/exhaustive-deps -- load once on mount }, []) const handlePickup = (sessionId: string) => { if (onPickup) { onPickup(sessionId) } else { navigate(`/pilot/${sessionId}?pickup=true`) } } if (isLoading) { return (
) } if (error) { return (

{error}

) } if (sessions.length === 0) { return (

No sessions awaiting escalation

) } return (

Awaiting pickup ({sessions.length})

{sessions.map((session) => (

{session.problem_summary || 'Untitled session'}

{session.escalation_reason && (

Reason: {session.escalation_reason}

)}
{session.problem_domain && ( {session.problem_domain} )} {session.step_count} steps {timeAgo(session.created_at)} {session.psa_ticket_id && ( #{session.psa_ticket_id} )}
))}
) }