import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query' import { api } from './api' import type { OpportunityFilters } from './types' export function useCandidates() { return useQuery({ queryKey: ['candidates'], queryFn: api.candidates }) } export function useCandidateIntelligence() { return useQuery({ queryKey: ['candidate-intelligence'], queryFn: () => api.candidateIntelligence() }) } export function useRequirements() { return useQuery({ queryKey: ['requirements'], queryFn: api.requirements }) } export function useOpportunities(candidateId: string | null) { return useQuery({ queryKey: ['opportunities', candidateId], queryFn: () => api.opportunities(candidateId as string), enabled: !!candidateId, }) } export function useRankedCandidates(requirementId: string | null) { return useQuery({ queryKey: ['ranked', requirementId], queryFn: () => api.rankCandidates(requirementId as string), enabled: !!requirementId, }) } export function useCommandCenter() { return useQuery({ queryKey: ['command-center'], queryFn: api.commandCenter }) } export function useSamOpportunities(filters: OpportunityFilters) { return useQuery({ queryKey: ['sam-opportunities', filters], queryFn: () => api.samOpportunities(filters), }) } export function useIncumbents(naics: string | null) { return useQuery({ queryKey: ['incumbents', naics], queryFn: () => api.incumbents(naics as string), enabled: !!naics, }) } export function useGalapagosAwards() { return useQuery({ queryKey: ['galapagos-awards'], queryFn: api.galapagosAwards }) } export function useWages() { return useQuery({ queryKey: ['wages'], queryFn: api.wages }) } export function useExternalCandidates() { return useQuery({ queryKey: ['external-candidates'], queryFn: api.externalCandidates }) } export function useDeleteExternalCandidate() { const qc = useQueryClient() return useMutation({ mutationFn: (id: string) => api.deleteExternalCandidate(id), onSuccess: () => { qc.invalidateQueries({ queryKey: ['external-candidates'] }) qc.invalidateQueries({ queryKey: ['candidate-intelligence'] }) }, }) } export function useScreen() { return useMutation({ mutationFn: (v: { candidateId: string; requirementId: string }) => api.screen(v.candidateId, v.requirementId), }) } export function useGenerateSlate() { return useMutation({ mutationFn: (v: { requirementId: string; name: string }) => api.generateSlate(v.requirementId, v.name), }) } // useDecideSlateMember records the human in the loop approve or reject on a slate member. export function useDecideSlateMember() { return useMutation({ mutationFn: (v: { slateId: string; candidateId: string; decision: 'approved' | 'rejected' }) => api.decideSlateMember(v.slateId, v.candidateId, v.decision), }) } // useAdverseImpact loads the four fifths adverse impact report (compliance role only). export function useAdverseImpact() { return useQuery({ queryKey: ['adverse-impact'], queryFn: api.adverseImpact, retry: false }) }