// Token管理工具

const TOKEN_KEY = 'museum_token'
const USER_INFO_KEY = 'museum_user_info'

// 获取token
export function getToken() {
  return localStorage.getItem(TOKEN_KEY) || sessionStorage.getItem(TOKEN_KEY)
}

// 设置token
export function setToken(token, remember = false) {
  if (remember) {
    localStorage.setItem(TOKEN_KEY, token)
    sessionStorage.removeItem(TOKEN_KEY)
  } else {
    sessionStorage.setItem(TOKEN_KEY, token)
    localStorage.removeItem(TOKEN_KEY)
  }
}

// 移除token
export function removeToken() {
  localStorage.removeItem(TOKEN_KEY)
  sessionStorage.removeItem(TOKEN_KEY)
}

// 检查是否已登录
export function isLoggedIn() {
  return !!getToken()
}

// 获取用户信息
export function getUserInfo() {
  const userInfo = localStorage.getItem(USER_INFO_KEY) || sessionStorage.getItem(USER_INFO_KEY)
  return userInfo ? JSON.parse(userInfo) : null
}

// 设置用户信息
export function setUserInfo(userInfo, remember = false) {
  const userInfoStr = JSON.stringify(userInfo)
  if (remember) {
    localStorage.setItem(USER_INFO_KEY, userInfoStr)
    sessionStorage.removeItem(USER_INFO_KEY)
  } else {
    sessionStorage.setItem(USER_INFO_KEY, userInfoStr)
    localStorage.removeItem(USER_INFO_KEY)
  }
}

// 移除用户信息
export function removeUserInfo() {
  localStorage.removeItem(USER_INFO_KEY)
  sessionStorage.removeItem(USER_INFO_KEY)
}

// 清除所有认证信息
export function clearAuth() {
  removeToken()
  removeUserInfo()
}

// 检查token是否过期（如果后端返回了过期时间）
export function isTokenExpired() {
  const token = getToken()
  if (!token) return true

  try {
    // 如果token是JWT格式，可以解析过期时间
    const payload = JSON.parse(atob(token.split('.')[1]))
    const currentTime = Math.floor(Date.now() / 1000)
    return payload.exp < currentTime
  } catch (error) {
    // 如果不是JWT格式或解析失败，认为token有效
    return false
  }
}

export default {
  getToken,
  setToken,
  removeToken,
  isLoggedIn,
  getUserInfo,
  setUserInfo,
  removeUserInfo,
  clearAuth,
  isTokenExpired,
}
