/* Es-lint is failing to detect the Query client form  @tanstack/react-query. So suppressing the eslint */
import {QueryClient} from "@tanstack/react-query"
import {JSONObject} from "../model"

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retry: 3,
      retryDelay: 2000,
      refetchOnWindowFocus: false,
    },
    mutations: {retry: 3, retryDelay: 2000},
  },
})

export const useReactQuery = () => {
  const refreshQuery = (queryKey: string) => queryClient.refetchQueries({queryKey: [queryKey]})

  const clearQueryCache = () => queryClient.clear()

  const updateQuery = <D>(queryKey: string, identifier: JSONObject, data: D) =>
    queryClient.setQueryData([queryKey, identifier], (oldData: JSONObject) =>
      oldData ? {...oldData, ...data} : oldData
    )

  return {
    queryClient,
    clearQueryCache,
    refreshQuery,
    updateQuery,
  }
}
