import { useState } from 'react'; import { useQuery } from '@tanstack/react-query'; import { analyticsApi } from '../api/client'; import { AlertCircle, Database } from 'lucide-react'; import { PieChart, Pie, Cell, BarChart, Bar, XAxis, YAxis, Tooltip, ResponsiveContainer, Legend } from 'recharts'; const COLORS = ['#6366f1', '#0ea5e9', '#10b981', '#f59e0b', '#ef4444', '#8b5cf6', '#ec4899', '#14b8a6']; export function AnalyticsPage() { const [days, setDays] = useState(30); const { data, isLoading, isError, refetch } = useQuery({ queryKey: ['analytics', days], queryFn: () => analyticsApi.getAnalytics(days), }); if (isLoading) { return (

Analytics Dashboard

Loading analytics data...

{/* Skeleton cards */}
{[1, 2, 3].map((i) => (
))}
{/* Skeleton charts */}
{[1, 2].map((i) => (
))}
); } if (isError) { return (

Analytics Dashboard

Unable to Load Analytics

Could not connect to the analytics database. Ensure PostgreSQL is running and DATABASE_URL is configured correctly.

); } if (!data || (data.total_messages === 0 && data.by_company.length === 0)) { return (

Analytics Dashboard

Track historical analysis data and view insights.

No analytics data available yet. Run some analyses first!
); } const companyData = data.by_company.map((c) => ({ name: (c.company_name || 'Unknown').toUpperCase(), value: c.count, })); const typeData = data.by_type.map((t) => ({ name: t.analysis_type || 'Unknown', count: t.count, })); return (
{/* Header */}

Analytics Dashboard

Track historical analysis data and view insights.

{/* Time Range Selector */}
{/* Summary Metrics */}
{/* Charts */}
{/* Pie Chart - Distribution by Company */} {companyData.length > 0 && (

Distribution by Company

`${name} ${(percent * 100).toFixed(0)}%`} labelLine={false} > {companyData.map((_, index) => ( ))}
)} {/* Bar Chart - Analysis Types */} {typeData.length > 0 && (

Analysis Types

)}
); } function MetricCard({ label, value }: { label: string; value: number }) { return (
{value}
{label}
); }