/* ============================================================ RUDRAA RATNA — Checkout, Custom Mix, Connect, Professional Help ============================================================ */ async function rrApiPost(action, payload){ try{ const res = await fetch("/rr-api.php?action=" + action, { method:"POST", headers:{ "Content-Type":"application/json" }, body:JSON.stringify(payload||{}) }); return await res.json(); }catch(e){ return { ok:false, error:"Could not reach server" }; } } /* ---------------- Checkout ---------------- */ function CheckoutPage(){ const { go } = useContext(Nav); const [items] = useState(()=>rrCartItems().map(it=>({ item:it, product:RR.byId(it.id) })).filter(x=>x.product && x.product.inStock!==false)); const [f,setF] = useState({ name:'', phone:'', email:'', address:'', city:'', pincode:'', intention:'', coupon:'' }); const [busy,setBusy] = useState(false); const [doneRef,setDoneRef] = useState(null); const set = (k,v)=>setF(s=>({ ...s, [k]:v })); const subtotal = items.reduce((s,x)=>s + x.product.price * Number(x.item.qty||1), 0); const couponValid = !!(f.coupon.trim() && RR.settings.offerCode && f.coupon.trim().toUpperCase()===RR.settings.offerCode.toUpperCase()); const pct = Number(RR.settings.offerPercent)||0; const discount = (couponValid && pct>0) ? Math.round(subtotal*pct/100) : 0; const total = subtotal - discount; const submit = async (viaWa)=>{ if(!f.name.trim() || !f.phone.trim()){ alert('Please enter your name and phone number.'); return; } if(!items.length){ alert('Your cart is empty.'); return; } setBusy(true); const payload = { name:f.name.trim(), phone:f.phone.trim(), email:f.email.trim(), address:f.address.trim(), city:f.city.trim(), pincode:f.pincode.trim(), intention:f.intention.trim(), coupon:couponValid?f.coupon.trim().toUpperCase():'', total:total, items:items.map(x=>({ id:x.product.id, name:x.product.name, qty:Number(x.item.qty||1), price:x.product.price })) }; const r = await rrApiPost('order', payload); const ref = (r && r.ok) ? r.ref : ''; setBusy(false); try{ localStorage.setItem('rr_cart_items','[]'); window.dispatchEvent(new CustomEvent('rr_cart_change')); }catch(e){} setDoneRef(ref || 'received'); if(viaWa){ const lines = items.map(x=>x.product.name + ' x ' + x.item.qty + ' - ' + RR.fmt(x.product.price*Number(x.item.qty||1))).join('\n'); const msg = "Hi Rudraa Ratna, I placed an order:\n" + lines + (f.intention.trim()?("\nIntention: "+f.intention.trim()):'') + (couponValid?("\nCoupon: "+f.coupon.trim().toUpperCase()):'') + "\nTotal: " + RR.fmt(total) + (ref?("\nOrder ref: "+ref):'') + "\nName: " + f.name.trim() + "\nPhone: " + f.phone.trim(); window.open(RR.wa(msg), '_blank', 'noopener'); } }; if(doneRef){ return (

Thank you{f.name?(', '+f.name.split(' ')[0]):''}!

Your order has been received{doneRef!=='received'?(' — reference '+doneRef):''}. Our team will contact you on WhatsApp to confirm availability, payment and delivery.

Message us
); } if(!items.length){ return (
Checkout

Your cart is empty

Add a product, then come back to checkout — or message us on WhatsApp for guided buying.

); } return (
Checkout

Confirm your order

Your details

set('name',e.target.value)} placeholder="Your name"/>
set('phone',e.target.value)} placeholder="+91 …" inputMode="tel"/>
set('email',e.target.value)} placeholder="you@email.com"/>