import { useEffect, useRef } from 'react';

interface UseTimeoutReturn {
  clear: () => void;
}

const useTimeout = (
  callback: () => void,
  delay: number,
  condition: boolean = true
): UseTimeoutReturn => {
  const timeoutRef = useRef<NodeJS.Timeout | null>(null);
  const callbackRef = useRef(callback);

  // Update callback ref when callback changes
  useEffect(() => {
    callbackRef.current = callback;
  }, [callback]);

  // Set up timeout
  useEffect(() => {
    if (condition && delay > 0) {
      timeoutRef.current = setTimeout(() => {
        callbackRef.current();
      }, delay);
    }

    return () => {
      if (timeoutRef.current) {
        clearTimeout(timeoutRef.current);
        timeoutRef.current = null;
      }
    };
  }, [delay, condition]);

  const clear = () => {
    if (timeoutRef.current) {
      clearTimeout(timeoutRef.current);
      timeoutRef.current = null;
    }
  };

  return { clear };
};

export default useTimeout;
