'use client'; import { useEffect, useState } from 'react'; import { motion } from 'framer-motion'; import { FaMusic, FaShoppingCart, FaDollarSign, FaUsers } 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 AdminDashboard() { const { albums } = useAlbums(); const [purchases, setPurchases] = useState([]); const [stats, setStats] = useState({ totalAlbums: 0, totalPurchases: 0, totalRevenue: 0, recentPurchases: [] as Purchase[], }); useEffect(() => { // Load purchases from localStorage const savedPurchases = localStorage.getItem('purchases'); if (savedPurchases) { const parsedPurchases = JSON.parse(savedPurchases); setPurchases(parsedPurchases); // Calculate stats const totalRevenue = parsedPurchases.reduce((total: number, purchase: Purchase) => { const album = albums.find((a) => a.id === purchase.albumId); return total + (album?.price || 0); }, 0); setStats({ totalAlbums: albums.length, totalPurchases: parsedPurchases.length, totalRevenue, recentPurchases: parsedPurchases.slice(-5).reverse(), }); } else { setStats({ totalAlbums: albums.length, totalPurchases: 0, totalRevenue: 0, recentPurchases: [], }); } }, []); const statCards = [ { icon: FaMusic, label: 'Total Albums', value: stats.totalAlbums, color: 'bg-paper-brown', iconBg: 'bg-paper-brown/20', }, { icon: FaShoppingCart, label: 'Total Purchases', value: stats.totalPurchases, color: 'bg-paper-dark', iconBg: 'bg-paper-dark/20', }, { icon: FaDollarSign, label: 'Total Revenue', value: formatPrice(stats.totalRevenue), color: 'bg-paper-gray', iconBg: 'bg-paper-gray/20', }, { icon: FaUsers, label: 'Active Users', value: stats.totalPurchases > 0 ? Math.ceil(stats.totalPurchases / 2) : 0, color: 'bg-paper-brown', iconBg: 'bg-paper-brown/30', }, ]; return (
{/* Header */}

Dashboard

Overview of your music store

{/* Stats Grid */}
{statCards.map((stat, index) => { const Icon = stat.icon; return (

{stat.label}

{stat.value}

); })}
{/* Recent Purchases */}

Recent Purchases

{stats.recentPurchases.length > 0 ? (
{stats.recentPurchases.map((purchase) => { const album = albums.find((a) => a.id === purchase.albumId); return (

{album?.title || 'Unknown Album'}

{new Date(purchase.purchaseDate).toLocaleDateString()} at{' '} {new Date(purchase.purchaseDate).toLocaleTimeString()}

{formatPrice(album?.price || 0)}

{purchase.transactionId.slice(0, 12)}...

); })}
) : (

No purchases yet

)}
); }