import { useState } from 'react' import { useTranslation } from 'react-i18next' import { Edit, Trash2, TestTube, Star, CheckCircle, XCircle, AlertTriangle, } from 'lucide-react' import { formatDistanceToNow } from 'date-fns' import { Card, CardHeader, CardTitle, CardContent, Button, Badge, Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from './ui' import type { DNSProvider } from '../api/dnsProviders' interface DNSProviderCardProps { provider: DNSProvider onEdit: (provider: DNSProvider) => void onDelete: (id: number) => void onTest: (id: number) => void isTesting?: boolean } export default function DNSProviderCard({ provider, onEdit, onDelete, onTest, isTesting = false, }: DNSProviderCardProps) { const { t } = useTranslation() const [showDeleteDialog, setShowDeleteDialog] = useState(false) const getStatusBadge = () => { if (!provider.has_credentials) { return ( {t('dnsProviders.unconfigured')} ) } if (provider.last_error) { return ( {t('dnsProviders.error')} ) } if (provider.enabled) { return ( {t('dnsProviders.active')} ) } return ( {t('common.disabled')} ) } const getProviderIcon = (type: string) => { const iconMap: Record = { cloudflare: '☁️', route53: '🔶', digitalocean: '🐙', googleclouddns: '🔵', namecheap: '🏢', godaddy: '🟢', azure: '⚡', hetzner: '🟠', vultr: '🔷', dnsimple: '💎', } return iconMap[type] || '🌐' } const handleDeleteConfirm = () => { onDelete(provider.id) setShowDeleteDialog(false) } return ( <>
{getProviderIcon(provider.provider_type)}
{provider.name} {provider.is_default && ( )}

{t(`dnsProviders.types.${provider.provider_type}`, provider.provider_type)}

{getStatusBadge()}
{/* Usage Stats */}

{t('dnsProviders.lastUsed')}

{provider.last_used_at ? formatDistanceToNow(new Date(provider.last_used_at), { addSuffix: true }) : t('dnsProviders.neverUsed')}

{t('dnsProviders.successRate')}

{provider.success_count} / {provider.failure_count}

{/* Settings */}

{t('dnsProviders.propagationTimeout')}

{provider.propagation_timeout}s

{t('dnsProviders.pollingInterval')}

{provider.polling_interval}s

{/* Last Error */} {provider.last_error && (

{t('dnsProviders.lastError')}

{provider.last_error}

)} {/* Action Buttons */}
{/* Delete Confirmation Dialog */} {t('dnsProviders.deleteProvider')} {t('dnsProviders.deleteConfirmation', { name: provider.name })} ) }