<script setup>
import { onHide, onLaunch, onShow } from '@dcloudio/uni-app'
import { storeToRefs } from 'pinia'
import { useMainStore } from '@/store/store'
const main = useMainStore()
import { isWeixin, parseQuery } from '@/utils/util'
import cookie from '@/utils/cookie'
import {
	userAuthSession,
	wechatAuth
} from '@/api/auth'
import { APP_ID } from '@/config'

// 检查更新逻辑
const autoUpdate = () => {
	// 获取小程序更新机制兼容
	if (uni.canIUse("getUpdateManager")) {
		// 获取更新管理器
		const updateManager = uni.getUpdateManager();
		//1. 检查小程序是否有新版本发布，向小程序后台请求完新版本信息
		updateManager.onCheckForUpdate((res) => {
			// 请求完新版本信息的回调
			if (res.hasUpdate) {
				//检测到新版本，需要更新，给出提示
				uni.showModal({
					title: "更新提示",
					content: "检测到新版本，是否下载新版本并重启小程序？",
					success: (res) => {
						if (res.confirm) {
							//2. 用户确定下载更新小程序，小程序下载及更新静默进行
							downLoadAndUpdate(updateManager);
						} else if (res.cancel) {
							//用户点击取消按钮的处理，如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
							uni.showModal({
								title: "温馨提示",
								content: "本次版本更新涉及到新的功能添加，旧版本无法正常访问的哦",
								showCancel: false, //隐藏取消按钮
								confirmText: "确定更新", //只保留确定更新按钮
								success: (res) => {
									if (res.confirm) {
										//下载新版本，并重新应用
										downLoadAndUpdate(updateManager);
									}
								},
							});
						}
					},
				});
			}
		});
	} else {
		// 如果希望用户在最新版本的客户端上体验您的小程序，可以这样子提示
		uni.showModal({
			title: "提示",
			content: "当前微信版本过低，无法使用该功能，请升级到最新微信版本后重试。",
		});
	}
}

/**
 * 下载小程序新版本并重启应用
 */
const downLoadAndUpdate = (updateManager) => {
	uni.showLoading();
	//静默下载更新小程序新版本，更新完成后回调
	updateManager.onUpdateReady(() => {
		uni.hideLoading();
		//新的版本已经下载好，调用 applyUpdate 应用新版本并重启
		updateManager.applyUpdate();
	});

	// 更新失败回调
	updateManager.onUpdateFailed(() => {
		// 新的版本下载失败
		uni.showModal({
			title: "已经有新版本了哟~",
			content: "新版本已经上线啦~，请您删除当前小程序，重新搜索打开哟~",
		});
	});
}




onLaunch(() => {
	autoUpdate();
	console.log('App Launch')
})

onShow(() => {
	console.log('App Show')

	// 检查用户登录情况
	// #ifdef H5
	if (isWeixin()) {
		oAuth()
		// H5编译的代码
		// 判断是否是微信浏览器
	}
	// #endif
	// #ifdef MP-WEIXIN
	wechatMiniLogin();
	// #endif
})

onHide(() => {
	console.log('App Hide')
})



const wechatMiniLogin = () => {
	//this.$u.toast('登录中');
	uni.login({
		provider: 'weixin'
	}).then(async (res) => {
		let data = await userAuthSession({
			code: res.code
		});
		if (data) {
			main.SET_OPENID(data.openId)
			if (data.hasOwnProperty('userInfo') && data.accessToken && data.accessToken != '') {
				main.SET_MEMBER(data.userInfo);
				main.SET_TOKEN(data.accessToken);
			}
		}
	});
}

const getAuthUrl = (appId) => {
	// #ifdef H5
	// #endif
	cookie.set('redirect', window.location.href)
	const url = `${location.origin}/h5/#/pages/index/index`
	cookie.set('index_url', url)
	let redirect_uri = encodeURIComponent(url)

	const state = 'STATE'
	return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
}

const oAuth = async () => {
	const WX_AUTH = 'wx_auth'
	return new Promise((resolve, reject) => {

		const accessToken = uni.getStorageSync('accessToken');
		if (cookie.has('wx_auth') && accessToken && main.isLogin) {
			reject()
			return
		}
		const { code } = parseQuery()
		if (!code) {
			//公众号appid
			const appid = APP_ID;
			location.href = getAuthUrl(appid)
			return
		} else {
			auth(code)
		}
		resolve()
	}).catch(error => {
		console.log(error)
	})
}

const auth = async (code) => {
	console.log('获取微信授权:', code)
	let data = await wechatAuth({ 'code': code })
	cookie.set('wx_auth', code)
	if (data) {
		main.SET_OPENID(data.openId)
		main.SET_MEMBER(data.userInfo);
		main.SET_TOKEN(data.accessToken);


	}

}



</script>

<style lang="scss">
@import '~@/static/style/app.scss';
//@import 'static/iconfont/iconfont.scss';
//@import url('./static/style/style.less');
@import 'static/style/yshop.css';

// /*每个页面公共css */
// page {
//   background-color: #f5f5f5;
// }</style>
