'use client' import { useEffect, useState } from 'react' import { Globe, CheckCircle2, AlertTriangle, RefreshCcw, Loader2 } from 'lucide-react' import { Button } from '@/components/ui/button' type Source = 'api' | 'fallback' | 'unavailable' interface Status { year: number source: Source reachable: boolean checkedAt: string } interface Props { year?: number compact?: boolean } export function TaxTableStatus({ year, compact = false }: Props) { const [status, setStatus] = useState(null) const [loading, setLoading] = useState(true) async function check() { setLoading(true) const params = new URLSearchParams() if (year) params.set('year', String(year)) const res = await fetch(`/api/salary/tax-tables/status?${params}`) if (res.ok) { const { data } = await res.json() setStatus(data) } setLoading(false) } useEffect(() => { check() // eslint-disable-next-line react-hooks/exhaustive-deps }, [year]) if (loading && !status) { return (
Kontrollerar skattetabeller…
) } if (!status) return null const Icon = status.source === 'api' ? CheckCircle2 : AlertTriangle const iconColor = status.source === 'api' ? 'text-success' : status.source === 'fallback' ? 'text-warning' : 'text-destructive' const label = status.source === 'api' ? `Skattetabeller för ${status.year} hämtas live från Skatteverket` : status.source === 'fallback' ? `Skatteverkets API är inte nåbart — använder lokal reservdata för ${status.year}` : `Skattetabeller för ${status.year} kunde inte hämtas` if (compact) { return (

{label}

) } return (
{label}
) }