'use client'; import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { FaTimes, FaTrash, FaShoppingCart } from 'react-icons/fa'; import { useCart } from '@/lib/CartContext'; import { Album, Purchase } from '@/lib/types'; import { formatPrice } from '@/lib/utils'; import PaymentModal from './PaymentModal'; import PurchaseSuccessModal from './PurchaseSuccessModal'; interface CartSidebarProps { isOpen: boolean; onClose: () => void; } export default function CartSidebar({ isOpen, onClose }: CartSidebarProps) { const { cartItems, removeFromCart, clearCart, getCartTotal } = useCart(); const [showPaymentModal, setShowPaymentModal] = useState(false); const [albumToPurchase, setAlbumToPurchase] = useState(null); const [showSuccessModal, setShowSuccessModal] = useState(false); const [latestPurchase, setLatestPurchase] = useState(null); const [purchasedAlbums, setPurchasedAlbums] = useState([]); const handleCheckout = () => { if (cartItems.length === 0) return; // For simplicity, we'll purchase the first item // In a real app, you'd handle multiple items differently if (cartItems.length > 0) { setAlbumToPurchase(cartItems[0].album); setShowPaymentModal(true); } }; const handlePurchaseSuccess = (albumId: string, transactionId: string) => { const purchase: Purchase = { albumId, transactionId, purchaseDate: new Date(), approvalStatus: 'pending', }; // Load existing purchases const savedPurchases = localStorage.getItem('purchases'); const existingPurchases = savedPurchases ? JSON.parse(savedPurchases) : []; const updatedPurchases = [...existingPurchases, purchase]; localStorage.setItem('purchases', JSON.stringify(updatedPurchases)); // Don't add to purchasedAlbums yet - wait for approval setLatestPurchase(purchase); // Remove from cart removeFromCart(albumId); setShowPaymentModal(false); setShowSuccessModal(true); }; const handleCloseSuccessModal = () => { setShowSuccessModal(false); setAlbumToPurchase(null); }; return ( <> {isOpen && ( <> {/* Backdrop */} {/* Sidebar */} {/* Header */}

Cart ({cartItems.length})

{/* Cart Items */}
{cartItems.length === 0 ? (

Your cart is empty

Add some albums to get started

) : (
{cartItems.map((item) => (
{/* Album Cover */}
{item.album.title}
{/* Album Info */}

{item.album.title}

{item.album.year} • {item.album.songs.length} tracks

{formatPrice(item.album.price)}

{/* Remove Button */}
))}
)}
{/* Footer */} {cartItems.length > 0 && (
{/* Total */}
Total {formatPrice(getCartTotal())}
{/* Buttons */}
)}
)}
{/* Payment Modal */} { setShowPaymentModal(false); setAlbumToPurchase(null); }} onSuccess={handlePurchaseSuccess} /> {/* Purchase Success Modal */} ); }