import type { OnlineUtilsLoadingOptions } from './formOnlineUtils';

export function createListScopedOnlineUtils(baseOnlineUtils: any, setLoading: (loading: boolean, tip?: string) => void) {
  let loadingCount = 0;
  const scopedOnlineUtils = {
    ...baseOnlineUtils,
    showLoading(tip?: string, options?: OnlineUtilsLoadingOptions) {
      if (options?.scope !== 'list') return baseOnlineUtils.showLoading?.(tip, options);
      loadingCount++;
      setLoading(true, tip);
    },
    hideLoading(options?: OnlineUtilsLoadingOptions) {
      if (options?.scope !== 'list') return baseOnlineUtils.hideLoading?.(options);
      if (!loadingCount) return;
      loadingCount--;
      if (!loadingCount) setLoading(false);
    },
  };

  return {
    onlineUtils: scopedOnlineUtils,
    resetLoading: () => {
      loadingCount = 0;
    },
  };
}
