import { ElMessage } from 'element-plus'
import { useRouter } from 'vue-router'

// Token 管理常量
const ACCESS_TOKEN_KEY = 'token'
const REFRESH_TOKEN_KEY = 'refresh_token'
const EXPIRES_AT_KEY = 'token_expires_at'

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export function isLoggedIn() {
  const token = localStorage.getItem(ACCESS_TOKEN_KEY)
  const expiresAt = Number(localStorage.getItem(EXPIRES_AT_KEY) || 0)
  
  if (!token) return false
  
  // 检查 token 是否过期
  if (expiresAt && Date.now() >= expiresAt) {
    // Token 已过期，清理本地存储
    clearTokens()
    return false
  }
  
  return true
}

/**
 * 清理所有 token 相关数据
 */
export function clearTokens() {
  localStorage.removeItem(ACCESS_TOKEN_KEY)
  localStorage.removeItem(REFRESH_TOKEN_KEY)
  localStorage.removeItem(EXPIRES_AT_KEY)
}

/**
 * 保存登录信息
 * @param {Object} data - 登录响应数据
 */
export function saveLoginData(data) {
  const { access_token, refresh_token, expires_in } = data
  
  if (access_token) {
    localStorage.setItem(ACCESS_TOKEN_KEY, access_token)
  }
  
  if (refresh_token) {
    localStorage.setItem(REFRESH_TOKEN_KEY, refresh_token)
  }
  
  if (typeof expires_in === 'number') {
    const expiresAt = Date.now() + expires_in * 1000
    localStorage.setItem(EXPIRES_AT_KEY, String(expiresAt))
  }
}

/**
 * 处理登录状态检查和重定向
 * @param {Object} router - Vue Router 实例
 * @param {string} loginPath - 登录页面路径，默认为 '/login'
 */
export function handleAuthRedirect(router, loginPath = '/login') {
  if (!isLoggedIn()) {
    ElMessage.warning('登录已过期，请重新登录')
    router.replace(loginPath)
    return false
  }
  return true
}

/**
 * 登出处理
 * @param {Object} router - Vue Router 实例
 * @param {string} loginPath - 登录页面路径，默认为 '/login'
 */
export function logout(router, loginPath = '/login') {
  clearTokens()
  ElMessage.success('已退出登录')
  router.replace(loginPath)
}


