/**
 * useMarkersQuery — react-query wrapper over POST /api/feed/markers.
 *
 * Returns all deals in radius as lean FeedMarker[] for map view.
 * keepPreviousData so filter changes don't blank the map.
 * staleTime=60s matches server edge-cache TTL.
 */

import { useQuery, keepPreviousData } from '@tanstack/react-query';
import type { FeedFilter } from '@/server/schemas/feed.js';
import type { FeedMarker } from '@/server/db/queries/feed.js';

export interface MarkersResult {
  markers: FeedMarker[];
}

export interface UseMarkersQueryOpts {
  enabled?: boolean;
}

export function useMarkersQuery(filter: FeedFilter, opts?: UseMarkersQueryOpts) {
  return useQuery<MarkersResult>({
    queryKey: ['feed-markers', filter],
    queryFn: async () => {
      const res = await fetch('/api/feed/markers', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(filter),
        credentials: 'include',
      });
      if (!res.ok) throw new Error(`markers_${res.status}`);
      return res.json() as Promise<MarkersResult>;
    },
    placeholderData: keepPreviousData,
    staleTime: 60_000,
    enabled: opts?.enabled ?? true,
  });
}
