${formatCurrency(convertedAmount, targetCode)}
`;
}).join('');
};
const handleTargetChange = (e) => {
const currency = e.target.dataset.currency;
if (e.target.checked) {
if (!selectedTargets.includes(currency)) selectedTargets.push(currency);
} else {
selectedTargets = selectedTargets.filter(c => c !== currency);
}
convertAndDisplay();
};
const handleBaseCurrencyChange = () => {
const symbol = currencyInfo[baseCurrencySelect.value]?.symbol || '$';
baseCurrencySymbolEl.textContent = symbol;
convertAndDisplay();
};
const handleDownloadPdf = () => {
const pdfTimestamp = document.getElementById('pdf-timestamp');
const pdfRatesTimestamp = document.getElementById('pdf-rates-timestamp');
const pdfBaseAmount = document.getElementById('pdf-base-amount');
const pdfResultsTableBody = document.getElementById('pdf-results-table-body');
const amount = parseFloat(baseAmountInput.value) || 0;
const baseCurrency = baseCurrencySelect.value;
const amountInUSD = amount / exchangeRates.rates[baseCurrency];
pdfTimestamp.textContent = new Date().toLocaleString('en-US');
pdfRatesTimestamp.textContent = new Date(exchangeRates.timestamp).toLocaleString('en-US');
pdfBaseAmount.textContent = `${formatCurrency(amount, baseCurrency)} (${baseCurrency})`;
pdfResultsTableBody.innerHTML = selectedTargets.map(targetCode => {
const convertedAmount = amountInUSD * exchangeRates.rates[targetCode];
return `
| ${currencyInfo[targetCode]?.name} (${targetCode}) |
${formatCurrency(convertedAmount, targetCode)} |
${exchangeRates.rates[targetCode]} |
`;
}).join('');
pdfContent.classList.remove('hidden');
html2canvas(pdfContent, { scale: 2 }).then(canvas => {
pdfContent.classList.add('hidden');
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const margin = 40;
const imgWidth = pdfWidth - (margin * 2);
const imgHeight = (canvas.height * imgWidth) / canvas.width;
pdf.addImage(imgData, 'PNG', margin, margin, imgWidth, imgHeight);
pdf.save('multi-currency-report.pdf');
}).catch(err => {
console.error("Error generating PDF:", err);
pdfContent.classList.add('hidden');
});
};
// --- Initial Setup & Event Listeners ---
ratesTimestampEl.textContent = new Date(exchangeRates.timestamp).toLocaleString('en-US');
populateSelectors();
baseAmountInput.addEventListener('input', convertAndDisplay);
baseCurrencySelect.addEventListener('change', handleBaseCurrencyChange);
pdfBtn.addEventListener('click', handleDownloadPdf);
// Initial run
convertAndDisplay();
});