import { useServerSuspenseQuery } from "@/lib/tanstack-query/hooks"; import { listPlayers, getPlayer, getUnassociatedPlayers, fetchMe, getPlayerStats, getAllPlayerStats, getPlayerMatches, getUnenrolledPlayers, getPlayersActivity } 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, viewType?: 'all' | 'mainline' | 'regional') => ['players', 'stats', id, viewType ?? 'all'], allStats: (viewType?: 'all' | 'mainline' | 'regional') => ['players', 'stats', 'all', viewType ?? 'all'], matches: (id: string) => ['players', 'matches', id], activity: ['players', 'activity'], }; 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, viewType?: 'all' | 'mainline' | 'regional') => ({ queryKey: playerKeys.stats(id, viewType), queryFn: async () => await getPlayerStats({ data: { playerId: id, viewType } }) }), allStats: (viewType?: 'all' | 'mainline' | 'regional') => ({ queryKey: playerKeys.allStats(viewType), queryFn: async () => await getAllPlayerStats({ data: viewType }) }), matches: (id: string) => ({ queryKey: playerKeys.matches(id), queryFn: async () => await getPlayerMatches({ data: id }) }), activity: () => ({ queryKey: playerKeys.activity, queryFn: async () => await getPlayersActivity() }), }; export const useMe = () => { const { queryKey, queryFn } = playerQueries.auth(); return useServerSuspenseQuery({ queryKey, queryFn, options: { staleTime: 30 * 1000, refetchOnMount: false, refetchOnWindowFocus: true, retry: 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, viewType?: 'all' | 'mainline' | 'regional') => useServerSuspenseQuery(playerQueries.stats(id, viewType)); export const useAllPlayerStats = (viewType?: 'all' | 'mainline' | 'regional') => useServerSuspenseQuery(playerQueries.allStats(viewType)); export const usePlayerMatches = (id: string) => useServerSuspenseQuery(playerQueries.matches(id)); export const useUnenrolledPlayers = (tournamentId: string) => useServerSuspenseQuery(playerQueries.unenrolled(tournamentId)); export const usePlayersActivity = () => useServerSuspenseQuery(playerQueries.activity());