// 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 = `
`;
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;