'use client'; import { useEffect, useState } from 'react'; import { motion } from 'framer-motion'; import { FaDownload, FaSearch } from 'react-icons/fa'; import { useAlbums } from '@/lib/AlbumsContext'; import { Purchase } from '@/lib/types'; import { formatPrice } from '@/lib/utils'; import AdminLayout from '@/components/AdminLayout'; export default function AdminPurchasesPage() { const { albums } = useAlbums(); const [purchases, setPurchases] = useState([]); const [searchTerm, setSearchTerm] = useState(''); useEffect(() => { const savedPurchases = localStorage.getItem('purchases'); if (savedPurchases) { setPurchases(JSON.parse(savedPurchases).reverse()); } }, []); const filteredPurchases = purchases.filter((purchase) => { const album = albums.find((a) => a.id === purchase.albumId); return ( album?.title.toLowerCase().includes(searchTerm.toLowerCase()) || purchase.transactionId.toLowerCase().includes(searchTerm.toLowerCase()) ); }); const totalRevenue = purchases.reduce((total, purchase) => { const album = albums.find((a) => a.id === purchase.albumId); return total + (album?.price || 0); }, 0); const exportToCSV = () => { const headers = ['Date', 'Time', 'Transaction ID', 'Album', 'Price']; const rows = purchases.map((purchase) => { const album = albums.find((a) => a.id === purchase.albumId); const date = new Date(purchase.purchaseDate); return [ date.toLocaleDateString(), date.toLocaleTimeString(), purchase.transactionId, album?.title || 'Unknown', formatPrice(album?.price || 0), ]; }); const csvContent = [headers, ...rows].map((row) => row.join(',')).join('\n'); const blob = new Blob([csvContent], { type: 'text/csv' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `purchases-${new Date().toISOString().split('T')[0]}.csv`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }; return (
{/* Header */}

Purchase History

{purchases.length} total purchases • {formatPrice(totalRevenue)} revenue

Export CSV
{/* Search */}
setSearchTerm(e.target.value)} placeholder="Search by album name or transaction ID..." className="w-full pl-12 pr-4 py-3 bg-paper-light border-2 border-paper-brown focus:border-paper-dark focus:outline-none text-paper-dark placeholder-paper-gray shadow-paper" />
{/* Purchases Table */} {filteredPurchases.length > 0 ? (
{filteredPurchases.map((purchase, index) => { const album = albums.find((a) => a.id === purchase.albumId); const date = new Date(purchase.purchaseDate); return ( ); })}
Date & Time Transaction ID Album Genre Price
{date.toLocaleDateString()}
{date.toLocaleTimeString()}
{purchase.transactionId}
{album?.title || 'Unknown'}
{album?.songs.length} tracks
{album?.genre} {formatPrice(album?.price || 0)}
) : (

{searchTerm ? 'No purchases found matching your search' : 'No purchases yet'}

)}
); }