import { useState, useEffect } from 'react';

export interface ILoadingUseDelayedParams {
  loading: boolean;
  delay: number;
}

export default function useDelayed({
  loading,
  delay,
}: ILoadingUseDelayedParams) {
  const shouldDelay = !!(delay && delay > 0);
  const [delayed, setDelayed] = useState(shouldDelay);

  useEffect(() => {
    if (loading && shouldDelay) {
      setDelayed(true);
      const timerId = setTimeout(() => setDelayed(false), delay);
      return () => clearTimeout(timerId);
    }

    return setDelayed(shouldDelay);
  }, [loading, delay, shouldDelay]);

  return delayed;
}
