`).join('');
}
function applyFilters() {
const searchTerm = searchInput.value.toLowerCase();
const selectedCategory = categoryFilter.value;
currentFilteredFoods = foodData.filter(food => {
const matchesSearch = food.name.toLowerCase().includes(searchTerm);
const matchesCategory = selectedCategory === 'all' || food.category === selectedCategory;
return matchesSearch && matchesCategory;
});
renderFoods(currentFilteredFoods);
}
async function generatePdf() {
const { jsPDF } = window.jspdf;
const doc = new jsPDF({ orientation: 'portrait', unit: 'mm', format: 'a4' });
// --- PDF Styling & Content ---
const primaryColor = '#d97706'; // amber-600
const textColor = '#374151';
doc.setFont('Inter', 'bold');
doc.setFontSize(22);
doc.setTextColor(primaryColor);
doc.text('Low Glycemic Index Food List', 105, 25, { align: 'center' });
doc.setFont('Inter', 'normal');
doc.setFontSize(10);
doc.setTextColor('#6b7280');
doc.text(`Generated on: ${new Date().toLocaleDateString('en-US')}`, 105, 33, { align: 'center' });
doc.setLineWidth(0.5);
doc.setDrawColor(primaryColor);
doc.line(20, 40, 190, 40);
let startY = 55;
doc.setFont('Inter', 'bold');
doc.setFontSize(12);
doc.setTextColor(textColor);
doc.text('Food Item', 22, startY);
doc.text('Category', 110, startY);
doc.text('GI Score', 160, startY);
doc.setLineWidth(0.2);
doc.line(20, startY + 3, 190, startY + 3);
startY += 10;
doc.setFont('Inter', 'normal');
doc.setFontSize(11);
currentFilteredFoods.forEach(food => {
if (startY > 280) return; // Prevent overflow
doc.text(food.name, 22, startY);
doc.text(food.category, 110, startY);
doc.setFont('Inter', 'bold');
doc.text(String(food.gi), 162, startY);
doc.setFont('Inter', 'normal');
startY += 8;
});
startY = 275;
doc.setLineWidth(0.2);
doc.setDrawColor('#d1d5db');
doc.line(20, startY, 190, startY);
startY += 8;
doc.setFontSize(9);
doc.setTextColor('#6b7280');
doc.text('A Low Glycemic Index (GI) is generally considered 55 or less. This list is for informational purposes only. Always consult with a healthcare provider for dietary guidance.', 105, startY, { align: 'center', maxWidth: 170 });
doc.save('Low_GI_Food_List.pdf');
}
// --- Event Listeners ---
if (searchInput) {
searchInput.addEventListener('keyup', applyFilters);
}
if (categoryFilter) {
categoryFilter.addEventListener('change', applyFilters);
}
if (downloadPdfBtn) {
downloadPdfBtn.addEventListener('click', generatePdf);
}
// --- Initial Load ---
foodData.sort((a,b) => a.gi - b.gi); // Sort by GI score initially
renderFoods(foodData);
});