'use client';
import { DashboardLayout } from '@/components/layout/dashboard-layout';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { StatCard } from '@/components/ui/stat-card';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import {
DollarSign,
ShoppingBag,
TrendingUp,
Users,
ArrowUpRight,
ArrowDownRight,
QrCode,
Calendar,
Download,
} from 'lucide-react';
import { generateDailyRevenue, generatePopularItems, generateOrdersByType, generateHourlyOrders } from '@/lib/demo-data';
import { formatCurrency, cn } from '@/lib/utils';
import { useState } from 'react';
const revenueData = generateDailyRevenue(30);
const popularItems = generatePopularItems();
const ordersByType = generateOrdersByType();
const hourlyOrders = generateHourlyOrders();
function BarChart({ data, dataKey, maxHeight = 120 }: { data: { [key: string]: string | number }[]; dataKey: string; maxHeight?: number }) {
const values = data.map((d) => Number(d[dataKey]));
const max = Math.max(...values);
return (
{data.map((d, i) => (
{typeof d[dataKey] === 'number' && dataKey === 'revenue' ? formatCurrency(Number(d[dataKey])) : d[dataKey]}
))}
);
}
function HeatmapRow({ label, values, max }: { label: string; values: number[]; max: number }) {
return (
{label}
{values.map((v, i) => (
))}
);
}
export default function AnalyticsPage() {
const [period, setPeriod] = useState('30d');
const totalRevenue = revenueData.reduce((s, d) => s + d.revenue, 0);
const totalOrders = revenueData.reduce((s, d) => s + d.orders, 0);
const avgOrder = totalRevenue / totalOrders;
return (
{/* Header */}
Analytics
Track performance, revenue, and customer insights.
{['7d', '14d', '30d', '90d'].map((p) => (
))}
{/* Stats */}
{/* Revenue Chart */}
Revenue Over Time
Daily revenue for the last 30 days
{formatCurrency(totalRevenue)}
12.5%
{revenueData.filter((_, i) => i % 5 === 0).map((d, i) => (
{new Date(d.date).toLocaleDateString('en', { month: 'short', day: 'numeric' })}
))}
{/* Popular Items */}
Top Selling Items
{popularItems.map((item, i) => {
const maxOrders = popularItems[0].orders;
return (
{i + 1}
{item.name}
{formatCurrency(item.revenue)}
);
})}
{/* Peak Hours */}
Peak Hours
{hourlyOrders.map((h, i) => (
i % 2 === 0 ? {h.hour} :
))}
Dinner Peak
18:00 – 21:00
{/* Order Distribution */}
{ordersByType.map((item) => (
{item.type}
{item.count}
{item.percentage}% of total
))}
);
}