document.addEventListener('DOMContentLoaded', () => { let cart = []; const cartItemsContainer = document.getElementById('cart-items'); const cartTotalPrice = document.getElementById('cart-total-price'); const checkoutBtn = document.getElementById('checkout-btn'); const mobileCartBtn = document.getElementById('mobile-cart-btn'); // Helper for currency formatting function formatCurrency(amount) { // Fallback if settings not defined const settings = (typeof COMPANY_SETTINGS !== 'undefined') ? COMPANY_SETTINGS : { currency_symbol: '$', currency_decimals: 2 }; const symbol = settings.currency_symbol || '$'; const decimals = parseInt(settings.currency_decimals || 2); return symbol + parseFloat(amount).toFixed(decimals); } // Add to cart document.querySelectorAll('.add-to-cart').forEach(button => { button.addEventListener('click', (e) => { const product = { id: e.target.dataset.id, name: e.target.dataset.name, price: parseFloat(e.target.dataset.price), quantity: 1 }; const existing = cart.find(item => item.id === product.id); if (existing) { existing.quantity++; } else { cart.push(product); } updateCart(); showToast(`${product.name} added to cart!`); }); }); function updateCart() { if (cart.length === 0) { cartItemsContainer.innerHTML = '

Your cart is empty.

'; cartTotalPrice.innerText = formatCurrency(0); checkoutBtn.disabled = true; if (mobileCartBtn) mobileCartBtn.innerText = `View Cart (${formatCurrency(0)})`; return; } cartItemsContainer.innerHTML = ''; let total = 0; cart.forEach(item => { const itemTotal = item.price * item.quantity; total += itemTotal; const div = document.createElement('div'); div.className = 'cart-item'; div.innerHTML = `
${item.name} x${item.quantity}
${formatCurrency(item.price)} ea
${formatCurrency(itemTotal)}
`; cartItemsContainer.appendChild(div); }); cartTotalPrice.innerText = formatCurrency(total); checkoutBtn.disabled = false; if (mobileCartBtn) mobileCartBtn.innerText = `View Cart (${formatCurrency(total)})`; } // Checkout checkoutBtn.addEventListener('click', () => { if (cart.length === 0) return; const table_id = new URLSearchParams(window.location.search).get('table') || '1'; // Calculate total const totalAmount = cart.reduce((acc, item) => acc + (item.price * item.quantity), 0); const orderData = { table_number: table_id, total_amount: totalAmount, // Only send necessary fields items: cart.map(item => ({ product_id: item.id, quantity: item.quantity, unit_price: item.price })) }; // Use existing api/order.php fetch('api/order.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(orderData) }) .then(res => res.json()) .then(data => { if (data.success) { cart = []; updateCart(); showToast('Order placed successfully! Please wait for preparation.', 'success'); } else { showToast('Error: ' + (data.error || 'Unknown error'), 'danger'); } }) .catch(err => { console.error(err); showToast('Failed to place order.', 'danger'); }); }); function showToast(message, type = 'dark') { const toastContainer = document.getElementById('toast-container'); if (!toastContainer) return; const toastId = 'toast-' + Date.now(); const toastHtml = ` `; toastContainer.insertAdjacentHTML('beforeend', toastHtml); const toastElement = document.getElementById(toastId); const toast = new bootstrap.Toast(toastElement); toast.show(); toastElement.addEventListener('hidden.bs.toast', () => toastElement.remove()); } });