import Vue from 'vue' //引入 Vue
import Vuex from 'vuex' //引入 Vuex
import ajax from './common/js/ajax.js' //引入封装好的 request 方法
import { //引入 api
	api_onLaunch,
	SaveUserInfo
} from './api.js'

Vue.use(Vuex) //套路
const store = new Vuex.Store({
	state: { //状态
		N401: 0,
		code: '',
		gotLocation: false,
		id: uni.getStorageSync('id'),
		openid: uni.getStorageSync('openid'),
		networkType: '', //网络状态信息
		userWeixinInfo: {}, //用户微信信息，包括微信名，微信头像等
		userServerInfo: {}, //用户服务器信息，包括 token，用户名，等级等
		// showVerify: false,  //是否显示手机短信验证弹窗
		showWarn: false, //是否显示警告用户弹窗
		showGetUserInfoButton: false, //是否显示获取用户信息button,
		showphoneBtn: false, //是否跳转用户手机号授权,
		courseList: [],
		// userId:'' //用户id用于跳转小程序使用
		// sex: uni.getStorageSync('sex')
	},
	mutations: {
		// GRUSERTID(state, userId){ //用户id用于跳转小程序使用
		// 	state.userId = userId
		// },
		CHANGECOURSELIST(state, courseList) {
			state.courseList = courseList
		},
		CHANGENETWORKSTATUS(state, payload) { //修改网络类型
			state.networkType = payload
		},
		GETUSERWEIXININFO(state, payload) { //获取到用户微信信息之后的操作
			console.log('微信信息', payload)
			state.userWeixinInfo = payload
		},
		GETUSERSERVERINFO(state, payload) { //获取到用户服务器信息之后的操作
			if (!state.openid) {
				uni.setStorageSync('openid', payload.openid)
				state.openid = payload.openid
			}
			if (!state.id) {
				uni.setStorageSync('id', payload.id)
				state.id = payload.id
			}
			// payload.cha_nickname = 'TEST1211313123'
			// payload.signuped = true
			// payload.score =1300
			// payload.max_score=1800
			// payload.type = 2
			// payload.level_name = '批发商'
			// payload.money = 1
			// payload.status = 3
			state.userServerInfo = payload //把获取到的用户服务器信息，保存到 vuex 中
		},
		HIDEVERIFY(state) { // 关闭手机号码验证弹窗
			state.showVerify = false
		},
		SHOWVERIFY(state) { // 打开手机号码验证弹窗
			state.showVerify = true
		},
		HIDEWARN(state) { // 关闭警告用户弹窗
			state.showWarn = false
		},
		SHOWWARN(state) { // 打开警告用户弹窗
			state.showWarn = true
		},
		SHOWGETUSERINFOBUTTON(state) { //显示获取用户信息按钮
			state.showGetUserInfoButton = true
		},
		HIDEGETUSERINFOBUTTON(state) { //隐藏获取用户信息按钮
			state.showGetUserInfoButton = false
		},
		SHOWPHONE(state) {
			state.showphoneBtn = true
		},
		HIDEPHONE(state) {
			state.showphoneBtn = false
		},
		SIGNUP(state) { // 用户报名成功改变状态
			state.userServerInfo.signuped = true
		},
		GETLOCALTION(state) { // 获取位置信息
			state.gotLocation = true
		},
		READCHALLENGE(state) { // 已读挑战消息
			state.userServerInfo.cha_nickname = ''
		}
	},
	actions: {
		// 登录接口 进入首页初始化
		newLogin({
			commit,
			state,
			dispatch
		}) {
			return new Promise(async (resolve, reject) => {
				let CODE = '123'
				if (!state.openid) { //登录状态过期，重新获取 code，并将code 连同用户头像/昵称/openid一同发给后台
					const [, {
						code
					}] = await uni.login()
					CODE = code
				}
				uni.hideLoading() // 异步操作结束，停止 loading
				const latitude = uni.getStorageSync('latitude')
				const longitude = uni.getStorageSync('longitude')
				const nickName = uni.getStorageSync('nickName')
				const avatar = uni.getStorageSync('avatar')
				const sex = uni.getStorageSync('sex') //后台没有用到
				this.$ajax.get(
					`${api_onLaunch}?id=${state.id}&sex=${sex}&latitude=${latitude}&longitude=${longitude}&code=${CODE}&avatar=${avatar}&openid=${state.openid ? state.openid : '123'}&nickname=${nickName}`
				).then(([, {
					data: res
				}]) => {
					// res.code = 300
					if (res.code === 200) { //当前微信用户已经绑定手机号了
						// user_status为1，销售员不能进入系统
						if (res.data.user_status == 1) {
							uni.reLaunch({
								url: "../index/jurisdiction?phone=" + res.data.phone
							})
							return false
						}
						state.N401 = 0
						commit('GETUSERSERVERINFO', res.data)
						// if (res.data.name != '微信用户') {
						// 	uni.setStorageSync('nickName', res.data.name)
						// 	uni.setStorageSync('avatar', res.data.avatar)
						// }
						uni.hideLoading() //异步操作结束，停止 loading
						this.$ajax.get('/user/account_status').then(([, {
							data: res
						}]) => {
							if (res.code === 200) {
								if (res.data.status === 1) {
									uni.reLaunch({
										url: "../loginOutTip/loginOutTip"
									})
									return false
								}
								uni.getSetting({
									success(res) {
										dispatch('getLocation')
										// if (!uni.getStorageSync(
										// 		'nickName') || !uni
										// 	.getStorageSync('avatar')) {
										// 	commit('SHOWGETUSERINFOBUTTON')
										// } else {
										// 	dispatch('getLocation')
										// }
									},
									fail() {}
								})
							}
							resolve()
						}).catch(() => {
							resolve()
						})
						// } else if (res.code === 20013) { //当前微用户没有绑定手机号，弹出验证码框 // 401 表示 code 过期/失效 openid 获取不到等
						// 	uni.hideLoading()  //异步操作结束，停止 loadin
						// 	commit('SHOWVERIFY')
						// 	uni.navigateTo({ url: '../boundPhone/boundPhone' })
						// 	resolve()
						// }else{ //其他边界情况，提示用户下拉刷新
						// 	uni.hideLoading() // 异步操作结束，停止 loading
						// 	uni.showModal({
						// 		content: res.msg,
						// 		showCancel: false
						// 	})
						// 	reject(500)
						// }
					} else if (res.code ===
						300) { //当前微信用户没有绑定手机号，弹出验证码框 // 401 表示 code 过期/失效 openid 获取不到等
						uni.hideLoading() //异步操作结束，停止 loadin
						// uni.navigateTo({ url: '../boundPhone/boundPhone' })
						commit('SHOWPHONE')
						// console.log('store里', state.showphoneBtn)
						// uni.showModal({
						//     title: '提示',
						// 	showCancel: false,
						//     content: '请使用代理商系统的账号密码登录',
						//     success: function (res) {
						//         if (res.confirm) {
						//             uni.navigateTo({ url: '../boundPhone/boundPhone' })
						// 			resolve()
						//         }
						//     }
						// });
					} else if (res.code === 401) {
						uni.hideLoading() // 异步操作结束，停止 loading
						reject(500)
					} else { //其他边界情况，提示用户下拉刷新
						uni.hideLoading() // 异步操作结束，停止 loading
						reject(500)
					}
				})
			})
		},
		// 位置信息授权
		getLocation({
			commit,
			state,
			dispatch
		}) {
			return new Promise(async (resolve, reject) => {
				const location = await uni.getLocation({
					type: 'gcj02'
				}) // 获取地理位置信息
				// 位置信息授权失败，重新授权
				const checkLocation = async () => {
					if (!state.gotLocation) {
						const [, {
							cancel,
							confirm
						}] = await uni.showModal({
							title: '提示',
							content: '获取您的位置信息失败，会导致您无法上传图片',
							// showCancel: false,
							confirmText: '重新获取'
						})
						if (confirm) {
							const settings = await new Promise(resolve => wx.openSetting({
								success(res) {
									resolve(res.authSetting)
								}
							}))
							if (settings['scope.userLocation']) {
								commit('GETLOCALTION')
								dispatch('newLogin')
							} else {
								checkLocation()
							}
						} else {
							commit('GETLOCALTION')
							// checkLocation()
						}
					}
				}
				if (location.length == 2) {
					uni.setStorageSync('latitude', location[1].latitude)
					uni.setStorageSync('longitude', location[1].longitude)
					commit('GETLOCALTION')
				} else {
					checkLocation()
				}
			})
		},
		// 用户信息
		// getUserInfo({
		// 	commit,
		// 	state,
		// 	dispatch
		// }) {
		// 	return new Promise(async (resolve, reject) => {
		// 		uni.getUserProfile({
		// 							desc: "获取你的昵称、头像、地区及性别",
		// 							success: (res) => {
		// 								console.log("所有",res)
		// 							},
		// 							fail:(err)=> {
		// 								uni.getUserProfile({})
		// 							}
		// 						})
		// 						return 
		// 		const [getUserWeixinInfoErr, userWeixinInfo] = await uni.getUserProfile({
		// 			desc: 'Wexin'
		// 		}) // 获取用户信息
		// 		if (getUserWeixinInfoErr) { //获取用户微信信息失败后，重新获取授权
		// 			uni.hideLoading() //取消loading
		// 			uni.showModal({
		// 				title: '提示',
		// 				showCancel: false,
		// 				content: '不授权将无法获取到您的用户信息，请开启授权',
		// 				success: function(res) {
		// 					if (res.confirm) {
		// 						commit('SHOWGETUSERINFOBUTTON')
		// 					}
		// 				}
		// 			})
		// 		} else { // 用户信息授权成功
		// 			let that = this
		// 			commit('GETUSERWEIXININFO', userWeixinInfo.userInfo) //将获取到的用户微信信息存在 store 里
		// 			uni.setStorageSync('nickName', userWeixinInfo.userInfo.nickName)
		// 			uni.setStorageSync('avatar', userWeixinInfo.userInfo.avatarUrl)
		// 			uni.setStorageSync('sex', userWeixinInfo.userInfo.gender)
		// 			that.$ajax.get(
		// 				`${SaveUserInfo}?nickname=${ userWeixinInfo.userInfo.nickName}&avatar=${ userWeixinInfo.userInfo.avatarUrl}`
		// 			).then(([, {
		// 				data: res
		// 			}]) => {
		// 				if (res.code == 200) {
		// 					dispatch('newLogin')
		// 				}
		// 			})
		// 		}
		// 	})
		// }
		//用户信息
		// getUserInfo({
		// 	commit,
		// 	state,
		// 	dispatch
		// }) {
		// 	return new Promise(async (resolve, reject) => {
		// 		console.log(uni.getStorageSync('nickName'), uni.getStorageSync('avatar'))
		// 		if (!uni.getStorageSync('nickName') || !uni.getStorageSync('avatar')) {
		// 			uni.showModal({
		// 				content: '为了更好的体验该程序，我们将获取您的昵称和头像',
		// 				success: res => {
		// 					if (res.confirm) {
		// 						uni.navigateTo({
		// 							url: '../information/information'
		// 						})
		// 					}
		// 				}
		// 			})
		// 		}
		// 	})
		// }
	}
})

Vuex.Store.prototype.$ajax = ajax(store)

export default store