import { useRef, useState } from "react";

export default function useDelayFalsy<T extends any = any>(
    init?: T,
    ms: number = 0,
) {
    const [_state, _setState] = useState<T | undefined>(init);
    const timer = useRef<any>();

    function setState(st: T) {
        if (st === undefined || st === null || st === false) {
            timer.current && clearTimeout(timer.current);
            timer.current = setTimeout(() => {
                _setState(st);
                timer.current = undefined;
            }, ms);
            return;
        }
        timer.current && clearTimeout(timer.current);
        timer.current = undefined;
        _setState(st);
    }

    return [_state, setState, _setState] as [
        ...ReturnType<typeof useState<T>>,
        ReturnType<typeof useState<T>>[1],
    ];
}