import { useCallback } from 'react';
import { useUiStore } from '../stores/uiStore';

export const useGlobalLoading = () => {
    const showLoader = useUiStore((state) => state.showLoader);
    const hideLoader = useUiStore((state) => state.hideLoader);
    const setLoading = useUiStore((state) => state.setLoading);
    const isGlobalLoading = useUiStore((state) => state.isLoading);

    const withLoading = useCallback(<T,>(operation: () => Promise<T> | T): Promise<T> => {
        showLoader();
        try {
            const result = operation();
            return Promise.resolve(result).finally(() => {
                hideLoader();
            });
        } catch (error) {
            hideLoader();
            return Promise.reject(error);
        }
    }, [showLoader, hideLoader]);

    return {
        showLoader,
        hideLoader,
        setLoading,
        withLoading,
       isGlobalLoading
    };
};
