/**
 * 消息管理工具
 * 用于管理待审批消息数量和 TabBar 小红点
 */

import { AssetRole } from '@/config'
import consumableTempAPI from '@/pages/api/consumable-temp'

// 消息数量缓存
let pendingCount = 0
let pollingTimer: number | null = null

/**
 * 获取待审批数量
 */
export async function fetchPendingCount(): Promise<number> {
  try {
    const res = (uni.getStorageSync('assetsRole') & AssetRole.CONSUMABLES_MANAGER) ? await consumableTempAPI.getRequestList({
      page: 1,
      pageSize: 100, // 获取足够多的数据来计算总数
      status: 'PENDING'
    }) : { statusCode: 200, data: { data: [] } }

    if (res.statusCode === 200 && (res.data as any)?.data) {
      const data = (res.data as any).data
      pendingCount = data.length || 0

      // 更新 TabBar 小红点
      updateTabBarBadge(pendingCount)

      return pendingCount
    }
  } catch (err) {
    console.error('获取待审批数量失败：', err)
  }

  return 0
}

/**
 * 更新 TabBar 消息的小红点
 */
function updateTabBarBadge(count: number) {
  try {
    if (count > 0) {
      // 显示小红点，如果数量大于0则显示数字
      uni.setTabBarBadge({
        index: 1, // 消息 tab 的索引（从0开始）
        text: count > 99 ? '99+' : count.toString()
      })
    } else {
      // 移除小红点
      uni.removeTabBarBadge({
        index: 1
      })
    }
  } catch (err) {
    // 某些页面没有 TabBar，忽略错误
    console.warn('更新 TabBar 角标失败（可能当前页面无 TabBar）：', err)
  }
}

/**
 * 获取当前待审批数量（从缓存）
 */
export function getPendingCount(): number {
  return pendingCount
}

/**
 * 开始定时轮询
 * @param interval 轮询间隔（毫秒），默认 30 秒
 */
export function startPolling(interval: number = 30000) {
  // 先立即执行一次
  fetchPendingCount()

  // 清除之前的定时器
  if (pollingTimer) {
    clearInterval(pollingTimer)
  }

  // 设置新的定时器
  pollingTimer = setInterval(() => {
    fetchPendingCount()
  }, interval) as unknown as number
}

/**
 * 停止定时轮询
 */
export function stopPolling() {
  if (pollingTimer) {
    clearInterval(pollingTimer)
    pollingTimer = null
  }
}

/**
 * 手动刷新（用于审批操作后立即更新）
 */
export function refreshNow() {
  return fetchPendingCount()
}
