/**
 * 统一认证工具模块
 * 整合所有认证检查、登录状态管理等功能
 */

import { HTTP_CONFIG } from '../config/config.js'

// ==================== 认证状态检查 ====================

/**
 * 检查用户是否已完成登录
 * @returns {Boolean} 是否已完成登录
 */
export function isUserLoggedIn() {
	const token = uni.getStorageSync(HTTP_CONFIG.storageKeys.token)
	const loginStep = uni.getStorageSync('loginStep')

	// 检查是否有有效的token和完成的登录流程
	return !!(token && (loginStep === 'profile_completed' || loginStep === 'phone_authed'))
}

/**
 * 检查并验证token有效性
 * @returns {Promise<boolean>} token是否有效
 */
export async function validateToken() {
	const token = uni.getStorageSync(HTTP_CONFIG.storageKeys.token)
	if (!token) {
		return false
	}

	try {
		// 调用一个简单的API来验证token
		const { getUserInfo } = await import('../api/profile.js')
		await getUserInfo({
			custom: {
				loading: false,
				toast: false
			}
		})
		return true
	} catch (error) {
		console.log('Token验证失败:', error)
		return false
	}
}

/**
 * 检查登录状态并处理
 * @returns {boolean} 是否已登录
 */
export function checkLoginStatus() {
	if (!isUserLoggedIn()) {
		console.log('用户未登录，跳转到登录页')
		navigateToLogin()
		return false
	}
	return true
}

// ==================== 认证数据管理 ====================

/**
 * 清理认证数据
 */
export function clearAuthData() {
	console.log('清理认证数据被调用')
	uni.removeStorageSync(HTTP_CONFIG.storageKeys.token)
	uni.removeStorageSync(HTTP_CONFIG.storageKeys.refreshToken)
	uni.removeStorageSync(HTTP_CONFIG.storageKeys.userInfo)
	uni.removeStorageSync('loginStep')
	uni.removeStorageSync('wxLoginCode')
	uni.removeStorageSync('wxUserInfo')
	uni.removeStorageSync('loginDate')
}

/**
 * 清理登录流程中的临时数据
 */
export function clearTempLoginData() {
	// 清理临时数据，保留重要的用户信息
	uni.removeStorageSync('wxLoginCode')
	console.log('清理临时登录数据')
}

// ==================== 登录流程处理 ====================

/**
 * 跳转到登录页面
 */
export function navigateToLogin() {
	uni.reLaunch({
		url: HTTP_CONFIG.loginPage
	})
}

/**
 * 处理需要鉴权的情况
 */
export function handleAuthRequired() {
	const loginStep = uni.getStorageSync('loginStep')

	// 根据当前登录状态决定跳转页面
	let targetPage = '/pages/login/login'
	let toastMessage = '请先登录'

	switch (loginStep) {
		case 'wx_logged':
			targetPage = '/pages/auth/phone-auth'
			toastMessage = '请完成手机号授权'
			break
		case 'phone_authed':
		case 'phone_skipped':
			targetPage = '/pages/profile/user-info?mode=setup'
			toastMessage = '请完善个人信息'
			break
		default:
			targetPage = '/pages/login/login'
			toastMessage = '请先登录'
	}

	// 显示提示并跳转
	uni.showToast({
		title: toastMessage,
		icon: 'none',
		duration: 1500
	})

	setTimeout(() => {
		uni.navigateTo({ url: targetPage }).catch(() => {
			uni.reLaunch({ url: targetPage })
		})
	}, 1500)
}

/**
 * 尝试自动登录
 * @returns {Promise<Boolean>} 是否登录成功
 */
export async function tryAutoLogin() {
	try {
		// 这里需要导入实际的自动登录函数
		const { autoLogin } = await import('../../utils/loginState.js')
		return await autoLogin()
	} catch (error) {
		console.error('自动登录失败:', error)
		return false
	}
}
