/**
 * TanStack Query hook definitions for each dashboard view.
 *
 * Each hook reads the current date range from the Zustand filter store,
 * includes it in the query key so filter changes trigger automatic refetches,
 * and calls the corresponding mock API function.
 *
 * staleTime is set to Infinity because mock data is deterministic and never
 * changes — there is no reason to refetch for the same query key.
 */

'use client';

import { useQuery } from '@tanstack/react-query';
import { useFilterStore } from '@/lib/stores/filter-store';
import * as mockApi from '@/lib/api/mock-api';

export function useOverviewData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['overview', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getOverviewData(dateRange),
    staleTime: Infinity,
  });
}

export function useWorksData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['works', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getWorksData(dateRange),
    staleTime: Infinity,
  });
}

export function useComposersData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['composers', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getComposersData(dateRange),
    staleTime: Infinity,
  });
}

export function usePayeesData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['payees', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getPayeesData(dateRange),
    staleTime: Infinity,
  });
}

export function useContractsData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['contracts', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getContractsData(dateRange),
    staleTime: Infinity,
  });
}

export function useIncomeData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['income', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getIncomeData(dateRange),
    staleTime: Infinity,
  });
}

export function useTransactionsData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['transactions', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getTransactionsData(dateRange),
    staleTime: Infinity,
  });
}

export function useCostsData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['costs', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getCostsData(dateRange),
    staleTime: Infinity,
  });
}

export function useStatementsData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['statements', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getStatementsData(dateRange),
    staleTime: Infinity,
  });
}

export function useSuspenseData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['suspense', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getSuspenseData(dateRange),
    staleTime: Infinity,
  });
}

export function useAuditData() {
  const { dateRange } = useFilterStore();
  return useQuery({
    queryKey: ['audit', dateRange.start.toISOString(), dateRange.end.toISOString()],
    queryFn: () => mockApi.getAuditData(dateRange),
    staleTime: Infinity,
  });
}
