import config from '@/config/index.js'

// 全局存储当前路由
let currentRoute = ''

/**
 * 设置当前路由
 * @param {string} route
 */
export function setCurrentRoute(route) {
	currentRoute = route
}

/**
 * 检查是否已登录
 * @returns {boolean}
 */
export function isLogin() {
	try {
		const token = uni.getStorageSync('token')
		return !!token
	} catch (e) {
		console.error('检查登录状态失败:', e)
		return false
	}
}

/**
 * 获取当前页面路径
 * @returns {string}
 */
export function getCurrentRoute() {
	try {
		// 如果有存储的路由，优先使用
		if (currentRoute) {
			return currentRoute
		}

		const pages = getCurrentPages()
		if (pages && pages.length > 0) {
			const currentPage = pages[pages.length - 1]
			const route = currentPage ? `/${currentPage.route}` : ''
			currentRoute = route
			return route
		}

		return ''
	} catch (e) {
		console.error('获取当前路由失败:', e)
		return ''
	}
}

/**
 * 检查当前路由是否在白名单中
 * @returns {boolean}
 */
export function isInWhitelist(route) {
	try {
		const currentRoute = route || getCurrentRoute()
		if (!currentRoute) return false

		return config.whitelist.some(path => currentRoute.includes(path))
	} catch (e) {
		console.error('检查白名单失败:', e)
		return false
	}
}

/**
 * 检查登录状态，未登录则跳转到登录页
 * @returns {boolean} 是否已登录
 */
export function checkLogin() {
	try {
		const currentRoute = getCurrentRoute()

		// 如果当前路由为空，可能是页面刚初始化，暂不检查
		if (!currentRoute) {
			return true
		}

		// 如果在白名单中，不检查登录状态
		if (isInWhitelist(currentRoute)) {
			return true
		}

		// 检查是否已登录
		if (isLogin()) {
			return true
		}

		// 未登录，跳转到登录页
		if (currentRoute !== '/pages/ucenter/login/index') {
			// 保存当前页面路径，登录后可以返回
			const pages = getCurrentPages()
			if (pages && pages.length > 0) {
				const currentPage = pages[pages.length - 1]
				try {
					uni.setStorageSync('beforLoginUrl', {
						route: currentPage.route,
						options: currentPage.options
					})
				} catch (e) {
					console.error('保存登录前页面失败:', e)
				}
			}

			uni.showToast({
				title: '请先登录',
				icon: 'none',
				duration: 1500
			})

			setTimeout(() => {
				uni.reLaunch({
					url: '/pages/ucenter/login/index',
					fail: (err) => {
						console.error('跳转登录页失败:', err)
					}
				})
			}, 1500)
		}

		return false
	} catch (e) {
		console.error('检查登录失败:', e)
		return false
	}
}

/**
 * 退出登录
 */
export function logout() {
	try {
		uni.removeStorageSync('token')
		uni.removeStorageSync('userInfo')

		uni.showToast({
			title: '已退出登录',
			icon: 'success',
			duration: 1500
		})

		setTimeout(() => {
			uni.reLaunch({
				url: '/pages/ucenter/login/index',
				fail: (err) => {
					console.error('跳转登录页失败:', err)
				}
			})
		}, 1500)
	} catch (e) {
		console.error('退出登录失败:', e)
	}
}
