/**
 * 用户角色工具类
 * 用于在页面加载时获取用户角色信息并存储到 localStorage
 */

import { getUserId } from './storage'
import api from '@/api/demo'

// localStorage 存储的 key
const USER_ROLE_STORAGE_KEY = 'user_role_data'

/**
 * 初始化用户角色信息
 * 在页面加载时调用，获取用户角色并存储到 localStorage
 * @param {Vue} VueInstance - Vue 实例，用于调用 $request 方法
 * @returns {Promise} 返回 Promise，成功时返回角色数据
 */
export function initUserRole(VueInstance) {
  return new Promise((resolve, reject) => {
    // 获取用户ID
    const userId = getUserId()
    
    if (!userId) {
      console.warn('未找到用户ID，无法获取用户角色信息')
      reject(new Error('未找到用户ID'))
      return
    }

    // 构建请求配置
    const request = {
      ...api.GET_NOW_USER_ROLE,
      params: {
        userId: '1231'
      },
      disableSuccessMsg: true
    }

    // 调用接口
    VueInstance.$request(request)
      .asyncThen((resp) => {
        // 获取返回数据
        const roleData = resp && resp.data ? resp.data : resp
        
        // 存储到 localStorage
        try {
          localStorage.setItem(USER_ROLE_STORAGE_KEY, JSON.stringify(roleData))
          console.log('用户角色信息已存储到 localStorage')
          resolve(roleData)
        } catch (error) {
          console.error('存储用户角色信息到 localStorage 失败:', error)
          reject(error)
        }
      })
      .asyncErrorCatch((err) => {
        console.error('获取用户角色信息失败:', err)
        reject(err)
      })
  })
}

/**
 * 获取存储的用户角色信息
 * @returns {object|null} 返回用户角色数据，如果不存在则返回 null
 */
export function getUserRole() {
  try {
    const roleDataStr = localStorage.getItem(USER_ROLE_STORAGE_KEY)
    if (!roleDataStr) {
      return null
    }
    return JSON.parse(roleDataStr)
  } catch (error) {
    console.error('从 localStorage 获取用户角色信息失败:', error)
    return null
  }
}

/**
 * 清除存储的用户角色信息
 */
export function clearUserRole() {
  try {
    localStorage.removeItem(USER_ROLE_STORAGE_KEY)
    console.log('用户角色信息已清除')
  } catch (error) {
    console.error('清除用户角色信息失败:', error)
  }
}

/**
 * 检查用户角色信息是否存在
 * @returns {boolean} 如果存在返回 true，否则返回 false
 */
export function hasUserRole() {
  return localStorage.getItem(USER_ROLE_STORAGE_KEY) !== null
}

