import { useQuery } from '@tanstack/react-query'; import { analyticsApi } from '@/lib/analytics-api'; export const analyticsKeys = { all: ['analytics'] as const, marketReport: (city: string, period: string) => ['analytics', 'market-report', city, period] as const, heatmap: (city: string, period: string) => ['analytics', 'heatmap', city, period] as const, districtStats: (city: string, period: string) => ['analytics', 'district-stats', city, period] as const, priceTrend: (district: string, city: string, propertyType: string, periods: string[]) => ['analytics', 'price-trend', district, city, propertyType, periods] as const, marketSnapshot: (city: string) => ['analytics', 'market-snapshot', city] as const, priceMovers: (direction: 'up' | 'down', period: string) => ['analytics', 'price-movers', direction, period] as const, trendingAreas: (period: number) => ['analytics', 'trending-areas', period] as const, }; export function useMarketReport(city: string, period: string) { return useQuery({ queryKey: analyticsKeys.marketReport(city, period), queryFn: () => analyticsApi.getMarketReport(city, period), }); } export function useHeatmap(city: string, period: string) { return useQuery({ queryKey: analyticsKeys.heatmap(city, period), queryFn: () => analyticsApi.getHeatmap(city, period), }); } export function useDistrictStats(city: string, period: string) { return useQuery({ queryKey: analyticsKeys.districtStats(city, period), queryFn: () => analyticsApi.getDistrictStats(city, period), }); } export function usePriceTrend( district: string, city: string, propertyType: string, periods: string[], ) { return useQuery({ queryKey: analyticsKeys.priceTrend(district, city, propertyType, periods), queryFn: () => analyticsApi.getPriceTrend(district, city, propertyType, periods), enabled: !!district && !!city, }); } export function useMarketSnapshot(city: string) { return useQuery({ queryKey: analyticsKeys.marketSnapshot(city), queryFn: () => analyticsApi.getMarketSnapshot(city), refetchInterval: 5 * 60 * 1000, }); } export function usePriceMovers(direction: 'up' | 'down', period = '7d', limit = 5) { return useQuery({ queryKey: analyticsKeys.priceMovers(direction, period), queryFn: () => analyticsApi.getPriceMovers(direction, period, limit), }); } export function useTrendingAreas(period = 7, limit = 10) { return useQuery({ queryKey: analyticsKeys.trendingAreas(period), queryFn: () => analyticsApi.getTrendingAreas(period, limit), }); }