/* ============================================================
AfricaSpares — Cart Context (shared state)
Used by: PartCard → CartPanel → CheckoutModal
============================================================ */
const CartCtx = React.createContext({ cart: [], addItem: () => {}, removeItem: () => {}, updateQty: () => {}, clearCart: () => {} });
const useCart = () => React.useContext(CartCtx);
function CartProvider({ children }) {
const [cart, setCart] = React.useState(() => {
try { const s = localStorage.getItem("gg_as_cart"); return s ? JSON.parse(s) : []; } catch { return []; }
});
const save = (items) => { setCart(items); try { localStorage.setItem("gg_as_cart", JSON.stringify(items)); } catch {} };
const addItem = (part) => {
setCart(prev => {
const exists = prev.find(i => i.sku === part.sku);
const next = exists
? prev.map(i => i.sku === part.sku ? { ...i, qty: i.qty + 1 } : i)
: [...prev, { ...part, qty: 1 }];
try { localStorage.setItem("gg_as_cart", JSON.stringify(next)); } catch {}
return next;
});
};
const removeItem = (sku) => save(cart.filter(i => i.sku !== sku));
const updateQty = (sku, qty) => {
if (qty < 1) { removeItem(sku); return; }
save(cart.map(i => i.sku === sku ? { ...i, qty } : i));
};
const clearCart = () => save([]);
const total = cart.reduce((s, i) => s + i.price * i.qty, 0);
return (
{L("Your cart is empty", "Votre panier est vide")}
{L("Add parts from the catalogue", "Ajoutez des pièces depuis le catalogue")}
{L("Shipping and taxes calculated at checkout", "Livraison et taxes calculées à la commande")}
{L(`Our team will contact you on ${form.phone} shortly to confirm your order, arrange payment by ${PAYMENT_METHODS.find(m=>m.id===method)?.label}, and organize delivery.`, `Notre équipe vous contactera au ${form.phone} très vite pour confirmer votre commande, organiser le paiement par ${PAYMENT_METHODS.find(m=>m.id===method)?.label}, et planifier la livraison.`)}
{L("A confirmation will be sent to", "Une confirmation sera envoyée à")} {form.email || L("your email", "votre email")}
{L("Online card payment is being finalized. For now, our team will call you to take payment securely by phone or in person once your order is confirmed.", "Le paiement par carte en ligne est en cours de finalisation. Pour l'instant, notre équipe vous appelle pour prendre le paiement en toute sécurité par téléphone ou en personne, une fois la commande confirmée.")}
{error}
}{L("By placing your order you accept our Terms of Service. Prices in XOF (UEMOA).", "En confirmant, vous acceptez nos CGV. Prix en XOF (UEMOA).")}