/**
 * 全局飞行中操作计数器
 * ======================
 *
 * 用于在窗口关闭时判断是否有未完成的第三方/本地任务，防止用户误操作导致
 * 已提交的任务或已扣除的积分无法回退。
 */

let pendingCount = 0;

/** 是否有未完成的操作 */
export function hasPendingOperations(): boolean {
  return pendingCount > 0;
}

/** 手动增加计数（慎用，建议优先使用 withPendingOperation） */
export function addPendingOperation(): void {
  pendingCount++;
}

/** 手动减少计数 */
export function removePendingOperation(): void {
  pendingCount = Math.max(0, pendingCount - 1);
}

/**
 * 将 Promise 包装为“飞行中操作”
 *
 * 操作开始时计数 +1，结束后（成功/失败）计数 -1。
 */
export async function withPendingOperation<T>(fn: () => Promise<T>): Promise<T> {
  addPendingOperation();
  try {
    return await fn();
  } finally {
    removePendingOperation();
  }
}
