'use client' import { useState } from 'react' import { Button } from '@/components/ui/button' import { formatDate } from '@/lib/utils' import { getDaysUntilExpiry, isConsentExpiringSoon } from '../lib/api-client' import { CreditCard, AlertTriangle, RefreshCw, Trash2, Loader2, CheckCircle, XCircle, } from 'lucide-react' import type { BankConnection } from '@/types' interface BankConnectionStatusProps { connection: BankConnection onSync: (connectionId: string) => void onDisconnect: (connectionId: string) => void isSyncing?: boolean } export function BankConnectionStatus({ connection, onSync, onDisconnect, isSyncing = false, }: BankConnectionStatusProps) { const daysUntilExpiry = getDaysUntilExpiry(connection.consent_expires) const isExpiring = isConsentExpiringSoon(connection.consent_expires) const statusConfig = { active: { icon: CheckCircle, color: 'text-green-600', label: 'Aktiv', variant: 'success' as const, }, pending: { icon: Loader2, color: 'text-yellow-600', label: 'Väntar', variant: 'warning' as const, }, error: { icon: XCircle, color: 'text-red-600', label: 'Fel', variant: 'destructive' as const, }, revoked: { icon: XCircle, color: 'text-gray-600', label: 'Bortkopplad', variant: 'secondary' as const, }, } const status = statusConfig[connection.status as keyof typeof statusConfig] || statusConfig.error const StatusIcon = status.icon // Parse accounts from connection const accounts = (connection.accounts_data as Array<{ uid: string iban?: string name?: string currency: string balance?: number balance_updated_at?: string }>) || [] const [now] = useState(() => Date.now()) function formatBalanceAge(updatedAt: string): string { const hoursAgo = Math.floor((now - new Date(updatedAt).getTime()) / (1000 * 60 * 60)) if (hoursAgo < 1) return 'Nyss uppdaterat' if (hoursAgo < 24) return `${hoursAgo}h sedan` const daysAgo = Math.floor(hoursAgo / 24) return `${daysAgo}d sedan` } return (
{connection.bank_name}
Konton
{account.name || account.iban || 'Okänt konto'}
{account.iban && ({account.iban.replace(/(.{4})/g, '$1 ').trim()}
)}{new Intl.NumberFormat('sv-SE', { style: 'currency', currency: account.currency, }).format(account.balance)}
{account.balance_updated_at && ({formatBalanceAge(account.balance_updated_at)}
)}