import { useEffect } from 'react';

import { useStores } from '@/app/(root)/AppProviders';

/**
 * Polls for running gens and checks for timed out gens
 */
export default function usePollRunningGens() {
  const { session, clips: clipsStore } = useStores();

  const enableWebsockets = session.flags?.['websockets'];

  const { runningRequests } = clipsStore;

  useEffect(() => {
    let pollTimeout: NodeJS.Timeout | undefined = undefined;
    function pollGens() {
      let delay = 1000;
      if (runningRequests.size) {
        delay = 5000;
        clipsStore.pollRunningGens();
      }
      pollTimeout = setTimeout(pollGens, delay);
    }
    pollGens();
    return () => {
      clearTimeout(pollTimeout);
    };
  }, [runningRequests, clipsStore]);

  useEffect(() => {
    if (enableWebsockets) {
      const checkTimedOutGensInterval = setInterval(async () => {
        clipsStore.checkTimedOutGens();
      }, 5000);
      return () => {
        clearInterval(checkTimedOutGensInterval);
      };
    }
  }, [enableWebsockets, clipsStore]);
}
