'use client'; import { Button } from '@/ui/Button'; import { Icon } from '@/ui/Icon'; import { Badge, StatRow, StatusIndicator } from '@/ui/StatusIndicator'; import { Text } from '@/ui/Text'; import { Grid } from '@/ui/primitives/Grid'; import { Stack } from '@/ui/primitives/Stack'; import { Activity, RefreshCw, Terminal, Wifi } from 'lucide-react'; interface APIStatusSectionProps { apiStatus: string; apiHealth: { successfulRequests: number; totalRequests: number; averageResponseTime: number; consecutiveFailures: number; lastCheck: number | Date | null; }; circuitBreakers: Record; checkingHealth: boolean; onHealthCheck: () => void; onResetStats: () => void; onTestError: () => void; } export function APIStatusSection({ apiStatus, apiHealth, circuitBreakers, checkingHealth, onHealthCheck, onResetStats, onTestError }: APIStatusSectionProps) { const reliability = apiHealth.totalRequests === 0 ? 0 : (apiHealth.successfulRequests / apiHealth.totalRequests); const reliabilityLabel = apiHealth.totalRequests === 0 ? 'N/A' : 'Calculated'; const getReliabilityColor = () => { if (apiHealth.totalRequests === 0) return 'text-gray-500'; if (reliability >= 0.95) return 'text-performance-green'; if (reliability >= 0.8) return 'text-warning-amber'; return 'text-red-400'; }; const getStatusVariant = () => { if (apiStatus === 'connected') return 'success'; if (apiStatus === 'degraded') return 'warning'; return 'danger'; }; const statusLabel = apiStatus.toUpperCase(); const healthSummary = `${apiHealth.successfulRequests}/${apiHealth.totalRequests} req`; const avgResponseLabel = `${apiHealth.averageResponseTime.toFixed(0)}ms`; const lastCheckLabel = apiHealth.lastCheck ? 'Recently' : 'Never'; const consecutiveFailuresLabel = String(apiHealth.consecutiveFailures); return ( API Status {/* Status Indicator */} {/* Reliability */} {/* Response Time */} {/* Consecutive Failures */} {apiHealth.consecutiveFailures > 0 && ( )} {/* Circuit Breakers */} Circuit Breakers: {Object.keys(circuitBreakers).length === 0 ? ( None active ) : ( {Object.entries(circuitBreakers).map(([endpoint, status]) => ( {endpoint} {status.state} {status.failures > 0 && ( ({status.failures}) )} ))} )} {/* API Actions */} Last Check: {lastCheckLabel} ); }