"use client"; import { useState, useEffect, useCallback } from "react"; export interface ClawInfo { id: string; name: string; isOnline: boolean; } export interface HeatmapPoint { lat: number; lng: number; weight: number; clawCount: number; onlineCount: number; city: string; country: string; claws: ClawInfo[]; } interface HeatmapData { points: HeatmapPoint[]; lastUpdated: string; } export function useHeatmapData(refreshInterval = 30000) { const [data, setData] = useState({ points: [], lastUpdated: "" }); const [isLoading, setIsLoading] = useState(true); const fetchData = useCallback(async () => { try { const res = await fetch("/api/v1/heatmap"); if (res.ok) { const json = await res.json(); setData(json); } } catch { // silently fail, will retry on next interval } finally { setIsLoading(false); } }, []); useEffect(() => { fetchData(); const interval = setInterval(fetchData, refreshInterval); return () => clearInterval(interval); }, [fetchData, refreshInterval]); return { ...data, isLoading, refresh: fetchData }; }