
import { computed, ref } from 'vue'
import { defineStore } from 'pinia'
import { message } from 'ant-design-vue'
import router from '@/router'
import api from '@/utils/api'

// 认证状态管理
// 管理用户的登录、登出和认证信息
// 提供认证相关的API调用和状态管理

export const useAuthStore = defineStore('auth', () => {
  // 用户认证令牌
  const token = ref(localStorage.getItem('token'))
  // 用户信息
  const userInfo = ref(JSON.parse(localStorage.getItem('userInfo') || '{}'))
  // 用户权限列表
  const permissions = ref(JSON.parse(localStorage.getItem('permissions') || '[]'))

  // 设置用户令牌
  const setToken = (newToken) => {
    token.value = newToken
    localStorage.setItem('token', newToken)
  }

  // 设置用户信息
  const setUserInfo = (info) => {
    userInfo.value = info
    localStorage.setItem('userInfo', JSON.stringify(info))
  }

  // 设置用户权限
  const setPermissions = (perms) => {
    permissions.value = perms
    localStorage.setItem('permissions', JSON.stringify(perms))
  }

  // 登录方法
  const login = async (credentials) => {
    try {
      // 调用后端登录接口
      const response = await api.auth.login(credentials)
      
      if (response.code === 200) {
        // 保存token
        const token = response.data.token
        setToken(token)
        
        // 获取用户信息
        const userInfoResponse = await api.auth.getUserInfo()
        if (userInfoResponse.code === 200) {
          const userInfoData = userInfoResponse.data
          setUserInfo(userInfoData)
          setPermissions(userInfoData.permissions || [])
          
          // 如果勾选了记住我，保存更长时间
          if (credentials.remember) {
            // 在实际应用中，这里可以设置更长的过期时间
            // 这里简化处理
          }
          
          message.success('登录成功')
          return true
        } else {
          message.error(userInfoResponse.message || '获取用户信息失败')
          return false
        }
      } else {
        message.error(response.message || '登录失败')
        return false
      }
    } catch (error) {
      console.error('登录失败:', error)
      message.error(error.message || '登录失败，请重试')
      return false
    }
  }

  // 退出登录
  const logout = async () => {
    try {
      // 调用后端退出登录接口
      await api.auth.logout()
    } catch (error) {
      console.error('退出登录API调用失败:', error)
      // 即使API调用失败，仍然清除本地数据并跳转到登录页
    } finally {
      // 清除本地存储的用户信息
      token.value = null
      userInfo.value = {}
      permissions.value = []
      localStorage.removeItem('token')
      localStorage.removeItem('userInfo')
      localStorage.removeItem('permissions')
      
      // 跳转到登录页面
      router.push('/login')
    }
  }

  // 检查用户是否有特定权限
  const hasPermission = (perm) => {
    return permissions.value.includes(perm)
  }

  // 检查用户是否已登录
  const isLoggedIn = () => {
    return !!token.value
  }
  
  // 计算属性，用于在模板中直接使用
  const isAuthenticated = computed(() => isLoggedIn())

  return {
    token,
    userInfo,
    permissions,
    setToken,
    setUserInfo,
    setPermissions,
    login,
    logout,
    hasPermission,
    isLoggedIn,
    isAuthenticated
  }
})