import React, { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { Link, useNavigate } from 'react-router-dom'; import { Trash2, Plus, Minus, ArrowRight, ShieldCheck, ShoppingBag, Truck } from 'lucide-react'; import { fetchCart, updateCartItemAsync, removeCartItemAsync, applyCouponAsync } from '../../store/slices/cartSlice'; import { showToast } from '../../store/slices/uiSlice'; import { formatINR } from '../../utils/formatCurrency'; const CartPage = () => { const dispatch = useDispatch(); const navigate = useNavigate(); const { items, coupon } = useSelector((state) => state.cart); const [couponCode, setCouponCode] = useState(''); useEffect(() => { dispatch(fetchCart()); }, [dispatch]); const subtotal = items.reduce((acc, item) => { const itemPrice = item.product?.salePrice || item.product?.price || item.price; return acc + itemPrice * item.quantity; }, 0); const discountAmount = coupon ? (coupon.discountType === 'percentage' ? (subtotal * coupon.discountValue) / 100 : coupon.discountValue) : 0; const freeShippingThreshold = 5000; // ₹5,000 threshold for India const shippingFee = subtotal >= freeShippingThreshold || subtotal === 0 ? 0 : 499; const totalAmount = Math.max(0, subtotal - discountAmount + shippingFee); const freeShippingProgress = Math.min(100, (subtotal / freeShippingThreshold) * 100); const handleApplyCoupon = (e) => { e.preventDefault(); if (couponCode.trim()) { dispatch(applyCouponAsync(couponCode.trim())) .unwrap() .then(() => dispatch(showToast({ message: 'Coupon applied successfully!', type: 'success' }))) .catch((err) => dispatch(showToast({ message: err || 'Invalid coupon', type: 'error' }))); } }; if (items.length === 0) { return (

Your Shopping Cart is Empty

Discover hand-crafted custom shop electric, acoustic, and bass guitars.

Explore Guitar Catalog
); } return (

Your Shopping Cart ({items.length} Items)

{/* Free Shipping Progress Bar */}
{subtotal >= freeShippingThreshold ? '🎉 You qualify for FREE Express Delivery in India!' : `Add ${formatINR(freeShippingThreshold - subtotal)} more to unlock FREE Delivery`} {Math.round(freeShippingProgress)}%
{/* Cart Items Table */}
{items.map((item) => { const product = item.product || {}; const itemPrice = product.salePrice > 0 ? product.salePrice : (product.price || item.price); return (
{product.name}
{product.brand?.name}

{product.name}

{item.variantColor && (
Variant: {item.variantColor} ({item.variantFinish})
)}
{formatINR(itemPrice)} each
{/* Quantity selector */}
{item.quantity}
{formatINR(itemPrice * item.quantity)}
); })}
{/* Order Summary Column */}

Order Summary

Subtotal {formatINR(subtotal)}
{coupon && (
Discount ({coupon.code}) -{formatINR(discountAmount)}
)}
Estimated Shipping {shippingFee === 0 ? 'FREE' : formatINR(shippingFee)}
{/* Coupon Code Input */}
setCouponCode(e.target.value)} className="w-full bg-slate-50 border border-slate-200 rounded-xl px-3 py-2 text-xs text-slate-900 uppercase focus:outline-none focus:border-amber-500" />
Total Payable {formatINR(totalAmount)}
256-Bit Encrypted Payment
); }; export default CartPage;