'use client'; import { useState, useEffect } from 'react'; import Header from '@/components/Header'; import Biography from '@/components/Biography'; import AlbumShowcase from '@/components/AlbumShowcase'; import MusicPlayer from '@/components/MusicPlayer'; import PaymentModal from '@/components/PaymentModal'; import PurchaseSuccessModal from '@/components/PurchaseSuccessModal'; import CartSidebar from '@/components/CartSidebar'; import { Album, Purchase } from '@/lib/types'; export default function Home() { const [purchasedAlbums, setPurchasedAlbums] = useState([]); const [purchases, setPurchases] = useState([]); const [currentAlbum, setCurrentAlbum] = useState(null); const [albumToPurchase, setAlbumToPurchase] = useState(null); const [showSuccessModal, setShowSuccessModal] = useState(false); const [latestPurchase, setLatestPurchase] = useState(null); const [cartOpen, setCartOpen] = useState(false); // Load purchases from localStorage and API on mount useEffect(() => { const savedPurchases = localStorage.getItem('purchases'); if (savedPurchases) { const parsedPurchases = JSON.parse(savedPurchases); setPurchases(parsedPurchases); } // Fetch approved purchases from API const fetchPurchases = async () => { try { const response = await fetch('/api/purchases'); if (response.ok) { const apiPurchases = await response.json(); // Only include approved purchases for determining access const approvedPurchases = apiPurchases.filter((p: Purchase) => p.approvalStatus === 'approved'); setPurchasedAlbums(approvedPurchases.map((p: Purchase) => p.albumId)); } } catch (error) { console.error('Error fetching purchases:', error); } }; fetchPurchases(); }, []); const handlePlayAlbum = (album: Album) => { setCurrentAlbum(album); }; const handlePurchaseClick = (album: Album) => { setAlbumToPurchase(album); }; const handlePurchaseSuccess = (albumId: string, transactionId: string) => { const purchase: Purchase = { albumId, transactionId, purchaseDate: new Date(), approvalStatus: 'pending', }; const updatedPurchases = [...purchases, purchase]; setPurchases(updatedPurchases); // Don't add to purchasedAlbums yet - wait for approval setLatestPurchase(purchase); // Save to localStorage localStorage.setItem('purchases', JSON.stringify(updatedPurchases)); // Close payment modal and show success modal setAlbumToPurchase(null); setShowSuccessModal(true); }; const handleCloseSuccessModal = () => { setShowSuccessModal(false); // Automatically open the player with the purchased album if (albumToPurchase) { setCurrentAlbum(albumToPurchase); } }; return ( <>
setCartOpen(true)} />
{/* Hero Section */}

Progressive Rock
Reimagined

Explore intricate compositions and sonic landscapes

{/* Biography Section */} {/* Albums Section */} {/* Footer */}

© {new Date().getFullYear()} Parsa. All rights reserved.

Progressive Rock Composer & Producer

{/* Music Player */} {currentAlbum && ( setCurrentAlbum(null)} onPurchase={handlePurchaseClick} /> )} {/* Payment Modal */} setAlbumToPurchase(null)} onSuccess={handlePurchaseSuccess} /> {/* Purchase Success Modal */} {/* Cart Sidebar */} setCartOpen(false)} /> ); }