import { useState, useEffect, useCallback } from 'react' import { ArrowRightLeft, RefreshCw } from 'lucide-react' import { useTranslation } from '../../i18n' import CustomSelect from '../shared/CustomSelect' const CURRENCIES = [ 'EUR','USD','GBP','JPY','CHF','CAD','AUD','NZD','CNY','HKD', 'SGD','THB','TRY','SEK','NOK','DKK','PLN','CZK','HUF','RON', 'BGN','HRK','ISK','RUB','UAH','BRL','MXN','ARS','CLP','COP', 'INR','IDR','MYR','PHP','KRW','TWD','VND','ZAR','EGP','MAD', 'NGN','KES','AED','SAR','QAR','KWD','BHD','OMR','ILS', ] const CURRENCY_OPTIONS = CURRENCIES.map(c => ({ value: c, label: c })) export default function CurrencyWidget() { const { t } = useTranslation() const [from, setFrom] = useState(() => localStorage.getItem('currency_from') || 'EUR') const [to, setTo] = useState(() => localStorage.getItem('currency_to') || 'USD') const [amount, setAmount] = useState('100') const [rate, setRate] = useState(null) const [loading, setLoading] = useState(false) const fetchRate = useCallback(async () => { if (from === to) { setRate(1); return } setLoading(true) try { const resp = await fetch(`https://api.exchangerate-api.com/v4/latest/${from}`) const data = await resp.json() setRate(data.rates?.[to] || null) } catch { setRate(null) } finally { setLoading(false) } }, [from, to]) useEffect(() => { fetchRate() }, [fetchRate]) useEffect(() => { localStorage.setItem('currency_from', from) }, [from]) useEffect(() => { localStorage.setItem('currency_to', to) }, [to]) const swap = () => { setFrom(to); setTo(from) } const rawResult = rate && amount ? (parseFloat(amount) * rate).toFixed(2) : null const formatNumber = (num) => { if (!num || num === '—') return '—' return parseFloat(num).toLocaleString('de-DE', { minimumFractionDigits: 2, maximumFractionDigits: 2 }) } const result = rawResult return (
{formatNumber(result)} {to}
{rate &&1 {from} = {rate.toFixed(4)} {to}
}