import { useEffect, useState } from "react"; import { Card } from "@/components/ui/card"; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from "recharts"; import { Users, Loader2 } from "lucide-react"; interface VisitorData { timestamp: number; count: number; } export function VisitorChart() { const [data, setData] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { fetchVisitorData(); const interval = setInterval(fetchVisitorData, 5 * 60 * 1000); return () => clearInterval(interval); }, []); const fetchVisitorData = async () => { try { const res = await fetch("/api/stats/visitors"); const json = await res.json(); if (json.success) { setData(json.data); } } catch (error) { console.error("Failed to fetch visitor data:", error); } finally { setLoading(false); } }; const formatXAxis = (timestamp: number) => { const date = new Date(timestamp); return date.getHours().toString().padStart(2, '0') + ':00'; }; const CustomTooltip = ({ active, payload }: any) => { if (active && payload && payload.length) { const data = payload[0].payload; const date = new Date(data.timestamp); const timeStr = date.toLocaleString('en-US', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', }); return (

{timeStr}

{data.count} visitor{data.count !== 1 ? 's' : ''}

); } return null; }; return (

Visitor Activity (Last 24 Hours)

{loading ? (
) : ( } /> )}
); }