'use client' import { useEffect, useState } from 'react' import { useParams, useRouter } from 'next/navigation' import { getSite, type Site } from '@/lib/api/sites' import { getStats, getRealtime, getDailyStats, getTopPages, getTopReferrers, getCountries, getCities, getRegions, getBrowsers, getOS, getDevices, getScreenResolutions, getEntryPages, getExitPages, getDashboard } from '@/lib/api/stats' import { formatNumber, formatDuration, getDateRange } from '@/lib/utils/format' import { toast } from 'sonner' import LoadingOverlay from '@/components/LoadingOverlay' import StatsCard from '@/components/dashboard/StatsCard' import RealtimeVisitors from '@/components/dashboard/RealtimeVisitors' import ContentStats from '@/components/dashboard/ContentStats' import TopReferrers from '@/components/dashboard/TopReferrers' import Locations from '@/components/dashboard/Locations' import TechSpecs from '@/components/dashboard/TechSpecs' import Chart from '@/components/dashboard/Chart' export default function SiteDashboardPage() { const params = useParams() const router = useRouter() const siteId = params.id as string const [site, setSite] = useState(null) const [loading, setLoading] = useState(true) const [stats, setStats] = useState({ pageviews: 0, visitors: 0, bounce_rate: 0, avg_duration: 0 }) const [realtime, setRealtime] = useState(0) const [dailyStats, setDailyStats] = useState([]) const [topPages, setTopPages] = useState([]) const [entryPages, setEntryPages] = useState([]) const [exitPages, setExitPages] = useState([]) const [topReferrers, setTopReferrers] = useState([]) const [countries, setCountries] = useState([]) const [cities, setCities] = useState([]) const [regions, setRegions] = useState([]) const [browsers, setBrowsers] = useState([]) const [os, setOS] = useState([]) const [devices, setDevices] = useState([]) const [screenResolutions, setScreenResolutions] = useState([]) const [dateRange, setDateRange] = useState(getDateRange(30)) useEffect(() => { loadData() const interval = setInterval(() => { loadRealtime() }, 30000) // Update every 30 seconds return () => clearInterval(interval) }, [siteId, dateRange]) const loadData = async () => { try { setLoading(true) const data = await getDashboard(siteId, dateRange.start, dateRange.end, 10) setSite(data.site) setStats(data.stats || { pageviews: 0, visitors: 0, bounce_rate: 0, avg_duration: 0 }) setRealtime(data.realtime_visitors || 0) setDailyStats(Array.isArray(data.daily_stats) ? data.daily_stats : []) setTopPages(Array.isArray(data.top_pages) ? data.top_pages : []) setEntryPages(Array.isArray(data.entry_pages) ? data.entry_pages : []) setExitPages(Array.isArray(data.exit_pages) ? data.exit_pages : []) setTopReferrers(Array.isArray(data.top_referrers) ? data.top_referrers : []) setCountries(Array.isArray(data.countries) ? data.countries : []) setCities(Array.isArray(data.cities) ? data.cities : []) setRegions(Array.isArray(data.regions) ? data.regions : []) setBrowsers(Array.isArray(data.browsers) ? data.browsers : []) setOS(Array.isArray(data.os) ? data.os : []) setDevices(Array.isArray(data.devices) ? data.devices : []) setScreenResolutions(Array.isArray(data.screen_resolutions) ? data.screen_resolutions : []) } catch (error: any) { toast.error('Failed to load data: ' + (error.message || 'Unknown error')) } finally { setLoading(false) } } const loadRealtime = async () => { try { const data = await getRealtime(siteId) setRealtime(data.visitors) } catch (error) { // Silently fail for realtime updates } } if (loading) { return } if (!site) { return (

Site not found

) } return (

{site.name}

{site.domain}

) }