`).join('');
if(state.products.length === 0) productsListEl.innerHTML = `
No products yet.
`;
};
const renderChannelManagement = () => {
channelsListEl.innerHTML = state.channels.map(c => `
`).join('');
};
// --- INITIALIZATION & EVENT HANDLERS ---
function initialize() {
addProductForm.addEventListener('submit', handleAddProduct);
updateStockForm.addEventListener('submit', handleUpdateStock);
addChannelForm.addEventListener('submit', handleAddChannel);
downloadPdfBtn.addEventListener('click', generatePdf);
renderAll();
}
window.handleDeleteChannel = handleDeleteChannel; // Make accessible from inline onclick
const switchTab = (tabName) => {
state.currentTab = tabName;
Object.values(tabButtons).forEach(b => b.classList.remove('active'));
Object.values(tabContents).forEach(c => c.classList.add('hidden'));
if(tabButtons[tabName]) tabButtons[tabName].classList.add('active');
if(tabContents[tabName]) tabContents[tabName].classList.remove('hidden');
};
Object.keys(tabButtons).forEach(k => tabButtons[k]?.addEventListener('click', () => switchTab(k)));
// --- PDF GENERATION ---
async function generatePdf() {
if (state.products.length === 0) return;
const { jsPDF } = window.jspdf;
document.getElementById('pdf-report-date').textContent = `Generated: ${new Date().toLocaleString()}`;
let tableHTML = `
| Product | Total Stock | `;
state.channels.forEach(c => { tableHTML += `${c} | `; });
tableHTML += `
`;
state.products.forEach(p => {
tableHTML += `| ${p.name} (${p.sku}) | ${p.stock} | `;
state.channels.forEach(() => { tableHTML += `${p.stock} | `; });
tableHTML += '
';
});
tableHTML += `
`;
document.getElementById('pdf-table-container').innerHTML = tableHTML;
const pdfContainer = document.getElementById('pdf-container');
pdfContainer.classList.remove('invisible', '-left-[9999px]');
try {
const canvas = await html2canvas(document.getElementById('pdf-report'), { scale: 2 });
const imgData = canvas.toDataURL('image/jpeg', 0.9);
const pdf = new jsPDF({ orientation: 'l', unit: 'px', format: 'a4' });
const pdfWidth = pdf.internal.pageSize.getWidth();
const pdfHeight = (canvas.height * pdfWidth) / canvas.width;
pdf.addImage(imgData, 'JPEG', 0, 0, pdfWidth, pdfHeight);
pdf.save('Inventory_Sync_Report.pdf');
} catch (error) { console.error("PDF generation failed:", error); }
finally { pdfContainer.classList.add('invisible', '-left-[9999px]'); }
}
initialize();
});