import { ApiCall } from '@/types';
import { useCallback, useEffect, useRef, useState } from 'react';

const useApiFetchedValue = <A extends [], R>(apiCall: ReturnType<ApiCall<A, R>>) => {
  const [result, setResult] = useState<R | undefined>(undefined);
  const hasRunRef = useRef(false);

  const refetch = useCallback(() => {
    apiCall().then(setResult);
  }, [apiCall, setResult]);

  useEffect(() => {
    if (!hasRunRef.current) {
      hasRunRef.current = true;
      refetch();
    }
  }, [refetch]);
  return [result, refetch] as [R | undefined, typeof refetch];
};

export default useApiFetchedValue;
