// 3D Print Farm API Client let livePrintJobs = []; async function loadPrintFarmData() { try { const res = await fetch('/api/print-farm'); if (!res.ok) throw new Error("Failed to load Print Farm data"); livePrintJobs = await res.json(); renderPrintFarmQueue(); updatePrintFarmStats(); } catch (err) { console.error("Print Farm Loading Error:", err); } } function renderPrintFarmQueue() { let container = document.getElementById('pf-jobs-container'); if (!container) { const card = document.querySelector('#print-farm .card'); if (card) { const queueCard = document.createElement('div'); queueCard.className = 'card'; queueCard.innerHTML = `
Active Print Farm Job Queue
`; card.parentNode.insertBefore(queueCard, card.nextSibling); container = document.getElementById('pf-jobs-container'); } } if (!container) return; container.innerHTML = ''; livePrintJobs.forEach(job => { const div = document.createElement('div'); div.style.cssText = 'background:#0b0f17; padding:0.6rem 0.8rem; border-radius:6px; font-size:0.75rem; display:flex; justify-content:space-between; align-items:center;'; let statusBadge = ' Complete'; if (job.status === 'printing') { statusBadge = ' Printing'; } else if (job.status === 'queued') { statusBadge = ' Queued'; } div.innerHTML = `
${job.part_name}
${job.printer_model} • ${job.material} • ${job.weight_grams}g
${statusBadge}
${job.print_time_hours}h ($${parseFloat(job.cost_estimate).toFixed(2)})
`; container.appendChild(div); }); } window.loadPrintFarmData = loadPrintFarmData;