import { Badge } from '@/components/ui/badge'; import { Progress } from '@/components/ui/progress'; import { Clock } from 'lucide-react'; export interface SLAData { status: 'normal' | 'approaching' | 'critical' | 'breached'; percentageUsed: number; elapsedText: string; elapsedHours: number; remainingText: string; remainingHours: number; deadline?: string; } interface SLAProgressBarProps { sla: SLAData | null; requestStatus: string; testId?: string; } export function SLAProgressBar({ sla, requestStatus, testId = 'sla-progress' }: SLAProgressBarProps) { // If request is closed/approved/rejected or no SLA data, show status message if (!sla || requestStatus === 'approved' || requestStatus === 'rejected' || requestStatus === 'closed') { return (
{requestStatus === 'closed' ? '🔒 Request Closed' : requestStatus === 'approved' ? '✅ Request Approved' : requestStatus === 'rejected' ? '❌ Request Rejected' : 'SLA Not Available'}
); } return (
SLA Progress
{sla.percentageUsed || 0}% elapsed
div]:bg-red-600' : sla.status === 'critical' ? '[&>div]:bg-orange-600' : sla.status === 'approaching' ? '[&>div]:bg-yellow-600' : '[&>div]:bg-green-600' }`} data-testid={`${testId}-bar`} />
{sla.elapsedText || `${sla.elapsedHours || 0}h`} elapsed {sla.remainingText || `${sla.remainingHours || 0}h`} remaining
{sla.deadline && (

Due: {new Date(sla.deadline).toLocaleString()} • {sla.percentageUsed || 0}% elapsed

)} {sla.status === 'critical' && (

⚠️ Approaching Deadline

)} {sla.status === 'breached' && (

🔴 URGENT - Deadline Passed

)}
); }