const CART_KEY='jp-group-cart'; const getCart=()=>JSON.parse(localStorage.getItem(CART_KEY)||'[]'); const saveCart=cart=>{localStorage.setItem(CART_KEY,JSON.stringify(cart));updateCartCount();renderCart()}; function updateCartCount(){const count=getCart().reduce((sum,item)=>sum+item.qty,0);document.querySelectorAll('#cart-count').forEach(el=>el.textContent=count)} function addToCart(product){const cart=getCart();const existing=cart.find(item=>item.id===product.id);if(existing)existing.qty+=1;else cart.push({...product,qty:1});saveCart(cart);const button=document.querySelector(`[data-id="${product.id}"] [data-add]`);if(button){button.innerHTML='Added ✓';setTimeout(()=>button.innerHTML='Add to cart +',1200)} } function renderCart(){const holder=document.querySelector('#cart-items');if(!holder)return;const cart=getCart();const totalItems=cart.reduce((s,i)=>s+i.qty,0);const subtotal=cart.reduce((s,i)=>s+i.price*i.qty,0);const count=document.querySelector('#cart-total-items');const total=document.querySelector('#cart-subtotal');if(count)count.textContent=`(${totalItems})`;if(total)total.textContent=`₹${subtotal.toLocaleString('en-IN')}`;if(!cart.length){holder.innerHTML='
+

Your cart is waiting.
Add something useful.

';return}holder.innerHTML=cart.map(item=>`

${item.name} × ${item.qty}

₹${item.price.toLocaleString('en-IN')} each
₹${(item.price*item.qty).toLocaleString('en-IN')}
`).join('');holder.querySelectorAll('[data-remove]').forEach(btn=>btn.addEventListener('click',()=>saveCart(getCart().filter(item=>item.id!==btn.dataset.remove))))} function setupNavigation(){const toggle=document.querySelector('.menu-toggle');const nav=document.querySelector('.nav-links');if(toggle&&nav)toggle.addEventListener('click',()=>{const open=nav.classList.toggle('open');toggle.setAttribute('aria-expanded',open)})} function setupFilters(){document.querySelectorAll('.filter-btn').forEach(btn=>btn.addEventListener('click',()=>{document.querySelectorAll('.filter-btn').forEach(b=>b.classList.remove('active'));btn.classList.add('active');const filter=btn.dataset.filter;document.querySelectorAll('.product-card').forEach(card=>card.classList.toggle('is-hidden',filter!=='all'&&card.dataset.category!==filter))}))} function setupProducts(){document.querySelectorAll('[data-add]').forEach(button=>button.addEventListener('click',()=>{const card=button.closest('.product-card');addToCart({id:card.dataset.id,name:card.dataset.name,price:Number(card.dataset.price)})}));document.querySelector('#clear-cart')?.addEventListener('click',()=>saveCart([]));document.querySelector('#checkout-btn')?.addEventListener('click',()=>{if(!getCart().length){alert('Add a product to your cart first.');return}window.location.href='contact.html?service=product'});renderCart()} function setupForm(){const form=document.querySelector('#enquiry-form');if(!form)return;const service=new URLSearchParams(location.search).get('service');if(service){const select=form.querySelector('[name="service"]');if(select&&[...select.options].some(o=>o.value===service))select.value=service}form.addEventListener('submit',async event=>{event.preventDefault();const data=Object.fromEntries(new FormData(form));const box=document.querySelector('#form-success');try{const response=await fetch('/api/bookings',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({name:data.name,phone:data.phone,service:data.service,pickup:data.pickup,destination:data.details,booking_date:data.date,booking_time:data.time})});const result=await response.json();if(!response.ok)throw new Error(result.error||'Unable to send enquiry');box.textContent=result.message;box.classList.add('show');form.reset()}catch(error){box.textContent='Prototype mode: your enquiry is ready locally. Connect the Flask API to save it.';box.classList.add('show')}window.scrollTo({top:box.offsetTop-120,behavior:'smooth')})} document.addEventListener('DOMContentLoaded',()=>{updateCartCount();setupNavigation();setupFilters();setupProducts();setupForm()});