'use client'; import React from 'react'; import { Activity, Wifi, RefreshCw, Terminal } from 'lucide-react'; import { Text } from '@/ui/Text'; import { Stack } from '@/ui/Stack'; import { Icon } from '@/ui/Icon'; import { Button } from '@/ui/Button'; import { Grid } from '@/ui/Grid'; import { StatusIndicator, StatRow, Badge } from '@/ui/StatusIndicator'; 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} ); }