import { useState, useEffect } from 'react'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { analytics } from '@/components/analytics/analytics-service'; import { Users, Activity, TrendingUp, AlertTriangle, Clock, MousePointer, } from 'lucide-react'; import { XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, BarChart, Bar, AreaChart, Area, } from 'recharts'; export function AnalyticsDashboard() { const [data, setData] = useState(() => analytics.getAnalyticsData()); const [refreshKey, setRefreshKey] = useState(0); // Refresh data periodically useEffect(() => { const interval = setInterval(() => { setData(analytics.getAnalyticsData()); }, 30000); // Refresh every 30 seconds return () => clearInterval(interval); }, [refreshKey]); const handleRefresh = () => { setData(analytics.getAnalyticsData()); setRefreshKey((k) => k + 1); }; return (
{/* Header */}

Analytics Dashboard

Usage metrics and performance insights

{/* Key Metrics */}
m.metric === 'page_load')?.avg || 0 ).toFixed(0)}ms`} icon={Clock} description="Page load performance" />
{/* Tabs for detailed views */} User Activity Feature Adoption Performance Cost Predictions Daily Active Users User activity over the last 7 days
new Date(date).toLocaleDateString()} /> new Date(date as string).toLocaleDateString()} />
Popular Pages Most visited pages
{data.pageViews.slice(0, 5).map((page) => (
{page.path} {page.count} views
))}
Feature Adoption Most used features
Performance Metrics Application performance over time
{data.performanceMetrics.map((metric) => (

{metric.metric.replace('_', ' ')}

{metric.avg.toFixed(2)}ms

{metric.count} samples
Min: {metric.min.toFixed(0)}ms | Max: {metric.max.toFixed(0)}ms
))}
); } interface MetricCardProps { title: string; value: string | number; icon: React.ElementType; description?: string; } function MetricCard({ title, value, icon: Icon, description }: MetricCardProps) { return ( {title}
{value}
{description && (

{description}

)}
); } interface CostPredictionsProps { predictions: Array<{ month: number; predicted: number; confidenceLow: number; confidenceHigh: number; }>; } function CostPredictions({ predictions }: CostPredictionsProps) { const [anomalies, setAnomalies] = useState>([]); // Simple anomaly detection simulation useEffect(() => { const mockHistoricalData = [950, 980, 1020, 990, 1010, 1050, 1000, 1100, 1300, 1020]; const detected = analytics.detectAnomalies(mockHistoricalData); setAnomalies( detected.map((a) => ({ index: a.index, cost: a.cost, type: a.type, })) ); }, []); return (
Cost Forecast ML-based cost predictions for the next 3 months
({ month: `+${p.month}M`, value: p.predicted, low: p.confidenceLow, high: p.confidenceHigh, })), ]} > `$${v}`} /> `$${Number(v).toFixed(2)}`} />
Predicted cost
Confidence interval
{anomalies.length > 0 && ( Detected Anomalies Unusual cost patterns detected in historical data
{anomalies.map((anomaly, i) => (

Cost {anomaly.type === 'spike' ? 'Spike' : 'Drop'} Detected

Day {anomaly.index + 1}: ${anomaly.cost.toFixed(2)}

))}
)}
); }