'use client'; import { useState, useEffect } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { motion } from 'framer-motion'; import { FaPlay, FaShoppingCart, FaArrowLeft, FaClock, FaMusic } from 'react-icons/fa'; import { Album, Purchase } from '@/lib/types'; import { useCart } from '@/lib/CartContext'; import { useAlbums } from '@/lib/AlbumsContext'; import Header from '@/components/Header'; import CartSidebar from '@/components/CartSidebar'; import MusicPlayer from '@/components/MusicPlayer'; import PaymentModal from '@/components/PaymentModal'; import PurchaseSuccessModal from '@/components/PurchaseSuccessModal'; export default function AlbumDetailPage() { const params = useParams(); const router = useRouter(); const { addToCart, isInCart } = useCart(); const { albums } = useAlbums(); const [album, setAlbum] = useState(null); const [purchasedAlbums, setPurchasedAlbums] = useState([]); const [purchases, setPurchases] = useState([]); const [cartOpen, setCartOpen] = useState(false); const [currentAlbum, setCurrentAlbum] = useState(null); const [albumToPurchase, setAlbumToPurchase] = useState(null); const [showSuccessModal, setShowSuccessModal] = useState(false); const [latestPurchase, setLatestPurchase] = useState(null); useEffect(() => { const foundAlbum = albums.find((a) => a.id === params.id); setAlbum(foundAlbum || null); // Load purchases const savedPurchases = localStorage.getItem('purchases'); if (savedPurchases) { const parsedPurchases = JSON.parse(savedPurchases); setPurchases(parsedPurchases); setPurchasedAlbums(parsedPurchases.map((p: Purchase) => p.albumId)); } }, [params.id]); const handlePurchaseSuccess = (albumId: string, transactionId: string) => { const purchase: Purchase = { albumId, transactionId, purchaseDate: new Date(), }; const updatedPurchases = [...purchases, purchase]; setPurchases(updatedPurchases); setPurchasedAlbums([...purchasedAlbums, albumId]); setLatestPurchase(purchase); localStorage.setItem('purchases', JSON.stringify(updatedPurchases)); setAlbumToPurchase(null); setShowSuccessModal(true); }; const handleCloseSuccessModal = () => { setShowSuccessModal(false); if (albumToPurchase) { setCurrentAlbum(albumToPurchase); } }; const handleAddToCart = () => { if (album && !isInCart(album.id)) { addToCart(album); } }; const isPurchased = album ? purchasedAlbums.includes(album.id) : false; const inCart = album ? isInCart(album.id) : false; if (!album) { return (

Album not found

); } const totalDuration = album.songs.reduce((total, song) => { const [minutes, seconds] = song.duration.split(':').map(Number); return total + minutes * 60 + seconds; }, 0); const formatTotalDuration = (seconds: number) => { const hours = Math.floor(seconds / 3600); const mins = Math.floor((seconds % 3600) / 60); if (hours > 0) { return `${hours}h ${mins}m`; } return `${mins} min`; }; return ( <>
setCartOpen(true)} />
{/* Back Button */}
{/* Album Header */}
{/* Album Cover */}
{album.title}
{isPurchased && (
Owned
)}
{/* Album Info */}

{album.year} • {album.genre}

{album.title}

{album.description}

{/* Album Stats */}
{album.songs.length} tracks
{formatTotalDuration(totalDuration)}
{/* Price */} {!isPurchased && (
${album.price}
)} {/* Action Buttons */}
{!isPurchased && ( <> )}
{/* Track List */}

Track List

{album.songs.map((song, index) => ( setCurrentAlbum(album)} >
{String(index + 1).padStart(2, '0')}

{song.title}

{!isPurchased && ( Preview )} {song.duration}
))}
{/* Music Player */} {currentAlbum && ( setCurrentAlbum(null)} onPurchase={setAlbumToPurchase} /> )} {/* Payment Modal */} setAlbumToPurchase(null)} onSuccess={handlePurchaseSuccess} /> {/* Purchase Success Modal */} {/* Cart Sidebar */} setCartOpen(false)} /> ); }