import { clearCache } from './apiCache.js'

const TOKEN_KEY = 'user_token'

// 获取token
export function getToken() {
	try {
		return uni.getStorageSync(TOKEN_KEY) || ''
	} catch (err) {
		console.error('获取token失败：', err)
		return ''
	}
}

// 保存token
export function setToken(token) {
	try {
		if (token && typeof token === 'string') {
			uni.setStorageSync(TOKEN_KEY, token)
		}
	} catch (err) {
		console.error('保存token失败：', err)
		uni.showToast({
			title: '登录状态保存失败',
			icon: 'none'
		})
	}
}

// 删除token
export function removeToken() {
	try {
		uni.removeStorageSync(TOKEN_KEY)
	} catch (err) {
		console.error('删除token失败：', err)
	}
}

// 判断是否登录
export function isLogin() {
	const token = getToken()
	return !!token && token.length > 0
}

// 校验登录（未登录跳转）
export function checkLogin() {
	if (!isLogin()) {
		const pages = getCurrentPages()
		const currentPage = pages[pages.length - 1]
		if (currentPage?.route !== 'pages/login/login') {
			uni.navigateTo({
				url: '/pages/login/login'
			})
		}
		return false
	}
	return true
}

// 退出登录
export function logout() {
	try {
		// 1. 删除token（保留原有核心逻辑）
		removeToken()
		clearCache()
		// 2. 清空用户信息缓存（解决用户名/头像/签名/邮箱残留）
		uni.removeStorageSync('userName')
		uni.removeStorageSync('userAvatar')
		uni.removeStorageSync('userSignature')
		uni.removeStorageSync('userEmail')
		// 如有其他登录相关缓存，继续补充：
		// uni.removeStorageSync('userInfo')

		// 3. 重置全局变量（如有）
		if (getApp().globalData?.userInfo) {
			getApp().globalData.userInfo = null
		}
		if (getApp().globalData?.token) {
			getApp().globalData.token = ''
		}
		if (getApp().globalData?.lastToken) {
			getApp().globalData.lastToken = ''
		}
	} catch (err) {
		console.error('清空登录缓存失败：', err)
		uni.showToast({
			title: '清空登录状态失败',
			icon: 'none'
		})
		return // 出错则终止，避免错误跳转
	}

	// 4. 提示（保留原有）
	uni.showToast({
		title: '已退出登录',
		icon: 'success',
		duration: 1500
	})

	// 5. 关键修改：用reLaunch替代switchTab，强制重启小程序
	setTimeout(() => {
		uni.reLaunch({
			url: '/pages/login/login', // 直接跳登录页，而非首页
			fail: () => {
				// 兜底：重启失败则直接跳转
				uni.redirectTo({
					url: '/pages/login/login'
				})
			}
		})
	}, 1500)
}