'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 [stats, setStats] = useState({ totalAlbums: 0, totalPurchases: 0, totalRevenue: 0, recentPurchases: [] as Purchase[], }); useEffect(() => { const loadStats = async () => { const response = await fetch('/api/purchases'); if (!response.ok) return; const allPurchases = await response.json() as Purchase[]; const totalRevenue = allPurchases .filter((purchase) => purchase.approvalStatus === 'approved') .reduce((total, purchase) => { const ids = purchase.albumIds || [purchase.albumId]; return total + albums .filter((album) => ids.includes(album.id)) .reduce((subtotal, album) => subtotal + album.price, 0); }, 0); setStats({ totalAlbums: albums.length, totalPurchases: allPurchases.length, totalRevenue, recentPurchases: allPurchases.slice(0, 5), }); }; void loadStats(); }, [albums]); 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 ids = purchase.albumIds || [purchase.albumId]; const purchaseAlbums = albums.filter((album) => ids.includes(album.id)); return (

{purchaseAlbums.map((album) => album.title).join(', ') || 'Unknown Album'}

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

{formatPrice(purchaseAlbums.reduce((total, album) => total + album.price, 0))}

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

); })}
) : (

No purchases yet

)}
); }