import { ref } from 'vue';

/**
 * 工作台 widget 统一刷新：卡片右上角刷新按钮触发，转 loading + 执行加载动作，并发期内忽略重复点击。
 *
 * - 已接真实接口的 widget：传入 loader（内部 await 拉取并回填数据）。
 * - 尚未接接口的 mock widget：不传 loader，转一拍 loading 给出可感知反馈；接口接通后补 loader 即自动生效。
 */
export function useWorkbenchRefresh(loader?: () => Promise<void> | void) {
  const loading = ref(false);

  async function refresh() {
    if (loading.value) return;
    loading.value = true;
    try {
      if (loader) {
        await loader();
      } else {
        // 占位：mock widget 无真实数据源，转一拍 loading；接口接通后传入 loader 替代
        await new Promise<void>(resolve => {
          setTimeout(resolve, 400);
        });
      }
    } finally {
      loading.value = false;
    }
  }

  return { loading, refresh };
}
