import { onLoad } from '@dcloudio/uni-app'
import { useUserStore } from '@/store'
import { needLoginPages as _needLoginPages, getNeedLoginPages } from '@/utils'
import { toPage } from '@/utils/page'

const loginRoute = import.meta.env.VITE_LOGIN_URL
const isDev = import.meta.env.DEV

/**
 * 判断是否已登录
 */
export function isLoggedIn() {
  const userStore = useUserStore()
  return !!userStore.token
}

/**
 * 获取用户信息
 */
export function getUserInfoHook() {
  const userStore = useUserStore()
  return userStore.userInfo
}

/**
 * 检查登录状态，未登录则跳转到登录页
 * @param redirectUrl 登录成功后的跳转地址，默认为当前页面地址及参数
 * @returns 是否已登录
 */
export function requireLogin(redirectUrl?: string) {
  if (isLoggedIn()) {
    return true
  }

  // 构建登录页面URL，包含重定向参数
  const loginUrl = redirectUrl ? `/pages/login/login?redirect=${encodeURIComponent(redirectUrl)}` : `/pages/login/login`

  // 跳转到登录页
  toPage({ url: loginUrl })
  return false
}

// 检查当前页面是否需要登录
export function usePageAuth() {
  onLoad((options) => {
    // 获取当前页面路径
    const pages = getCurrentPages()
    const currentPage = pages[pages.length - 1]
    const currentPath = `/${currentPage.route}`

    // 获取需要登录的页面列表
    let needLoginPages: string[] = []
    if (isDev) {
      needLoginPages = getNeedLoginPages()
    }
    else {
      needLoginPages = _needLoginPages
    }

    // 检查当前页面是否需要登录
    const isNeedLogin = needLoginPages.includes(currentPath)
    if (!isNeedLogin) {
      return
    }

    const hasLogin = isLoggedIn()
    if (hasLogin) {
      return true
    }

    // 构建重定向URL
    const queryString = Object.entries(options || {})
      .map(([key, value]) => `${key}=${encodeURIComponent(String(value))}`)
      .join('&')

    const currentFullPath = queryString ? `${currentPath}?${queryString}` : currentPath
    const redirectRoute = `${loginRoute}?redirect=${encodeURIComponent(currentFullPath)}`

    // 重定向到登录页
    uni.redirectTo({ url: redirectRoute })
  })
}
