const TokenKey = 'App-Token'

/**
 * 获取Token（兼容多平台，带错误处理）
 * @returns string 空字符串表示无Token
 */
export function getToken(): string {
  try {
    // 优先使用uniapp API
    const token = uni.getStorageSync(TokenKey)
    // 处理非字符串场景（如存入了null/undefined）
    return token ? String(token) : ''
  } catch (error) {
    // 兼容H5隐私模式/localStorage不可用场景
    console.warn('获取Token失败:', error)
    return ''
  }
}

/**
 * 设置Token（兼容多平台，带错误处理）
 * @param token 必须为字符串，非字符串会自动转换
 * @returns boolean 是否设置成功
 */
export function setToken(token: string): boolean {
  try {
    if (typeof token !== 'string') {
      console.warn('Token必须为字符串，已自动转换')
      token = String(token)
    }
    uni.setStorageSync(TokenKey, token)
    return true
  } catch (error) {
    console.error('设置Token失败:', error)
    // H5兜底：尝试直接操作localStorage
    if (process.env.VUE_APP_PLATFORM === 'h5' && typeof localStorage !== 'undefined') {
      try {
        localStorage.setItem(TokenKey, token)
        return true
      } catch (e) {
        console.error('H5 localStorage设置失败:', e)
      }
    }
    return false
  }
}

/**
 * 移除Token（兼容多平台，带错误处理）
 * @returns boolean 是否移除成功
 */
export function removeToken(): boolean {
  try {
    uni.removeStorageSync(TokenKey)
    return true
  } catch (error) {
    console.error('移除Token失败:', error)
    // H5兜底
    if (process.env.VUE_APP_PLATFORM === 'h5' && typeof localStorage !== 'undefined') {
      try {
        localStorage.removeItem(TokenKey)
        return true
      } catch (e) {
        console.error('H5 localStorage移除失败:', e)
      }
    }
    return false
  }
}

/**
 * 检查Token是否有效（辅助函数）
 * @returns boolean
 */
export function hasValidToken(): boolean {
  const token = getToken()
  return !!token && token.trim() !== ''
}