import { useServerSuspenseQuery } from "@/lib/tanstack-query/hooks"; import { listPlayers, getPlayer, getUnassociatedPlayers, fetchMe, getPlayerStats, getAllPlayerStats, getPlayerMatches, getUnenrolledPlayers } from "./server"; export const playerKeys = { auth: ['auth'], list: ['players', 'list'], details: (id: string) => ['players', 'details', id], unassociated: ['players','unassociated'], unenrolled: (tournamentId: string) => ['players', 'unenrolled', tournamentId], stats: (id: string) => ['players', 'stats', id], allStats: ['players', 'stats', 'all'], matches: (id: string) => ['players', 'matches', id], }; export const playerQueries = { auth: () => ({ queryKey: playerKeys.auth, queryFn: async () => await fetchMe() }), list: () => ({ queryKey: playerKeys.list, queryFn: async () => await listPlayers() }), details: (id: string) => ({ queryKey: playerKeys.details(id), queryFn: async () => await getPlayer({ data: id }) }), unassociated: () => ({ queryKey: playerKeys.unassociated, queryFn: async () => await getUnassociatedPlayers() }), unenrolled: (tournamentId: string) => ({ queryKey: playerKeys.unenrolled(tournamentId), queryFn: async () => await getUnenrolledPlayers({ data: tournamentId }) }), stats: (id: string) => ({ queryKey: playerKeys.stats(id), queryFn: async () => await getPlayerStats({ data: id }) }), allStats: () => ({ queryKey: playerKeys.allStats, queryFn: async () => await getAllPlayerStats() }), matches: (id: string) => ({ queryKey: playerKeys.matches(id), queryFn: async () => await getPlayerMatches({ data: id }) }), }; export const useMe = () => { const { queryKey, queryFn } = playerQueries.auth(); return useServerSuspenseQuery({ queryKey, queryFn, options: { staleTime: 0, refetchOnMount: true, retry: (failureCount, error: any) => { if (error?.response?.status === 401) { const errorData = error?.response?.data; if (errorData?.error === "SESSION_REFRESH_REQUIRED") { const currentUrl = window.location.pathname + window.location.search; window.location.href = `/refresh-session?redirect=${encodeURIComponent(currentUrl)}`; return false; } } return failureCount < 3; } } }); }; export const usePlayer = (id: string) => useServerSuspenseQuery(playerQueries.details(id)); export const usePlayers = () => useServerSuspenseQuery(playerQueries.list()); export const useUnassociatedPlayers = () => useServerSuspenseQuery(playerQueries.unassociated()); export const usePlayerStats = (id: string) => useServerSuspenseQuery(playerQueries.stats(id)); export const useAllPlayerStats = () => useServerSuspenseQuery(playerQueries.allStats()); export const usePlayerMatches = (id: string) => useServerSuspenseQuery(playerQueries.matches(id)); export const useUnenrolledPlayers = (tournamentId: string) => useServerSuspenseQuery(playerQueries.unenrolled(tournamentId));