import { useQuery, type Query } from '@tanstack/react-query';
import { syncClock } from '../lib/clock';
import { api } from './endpoints';
import { queryKeys } from './queryKeys';
import type { Status } from './types/status';

const BUSY_POLL_MILLISECONDS = 2000;
export const IDLE_POLL_MILLISECONDS = 30000;

export function statusPollInterval(
	query: Pick< Query< Status >, 'state' >
): number {
	if ( query.state.data?.scan.state === 'running' ) {
		return BUSY_POLL_MILLISECONDS;
	}

	return IDLE_POLL_MILLISECONDS;
}

async function fetchStatus( signal: AbortSignal ): Promise< Status > {
	const status = await api.status( signal );

	syncClock( status.now );

	return status;
}

export function useStatus() {
	return useQuery( {
		queryKey: queryKeys.status,
		queryFn: ( { signal } ) => fetchStatus( signal ),
		staleTime: 0,
		refetchInterval: statusPollInterval,
	} );
}
