import {
	saveOwnerStorage,
	saveUserLoginInfo,
	getWAppId,
	saveWAppId,
	getLoginFlag,
	saveOpenId
} from '../utils/StorageUtil.js'

import {
	showInfo
} from '../utils/CoreUtil.js'

import url from '../../../constant/url.js'

import {
	requestNoAuth
} from '../java110Request.js'

export function pageOnLoad(options) {
	getPageWAppId();
	doPageCheckSession('',function(){},'1');
}

/**
 * 获取WAppId
 */
export function getPageWAppId() {
	let wAppId = null;

	let accountInfo = uni.getAccountInfoSync();
	wAppId = accountInfo.miniProgram.appId;

	saveWAppId(wAppId)
	return wAppId;
}

/**
 * 页面 session
 * @param {Object} _call 回调函数
 */
export function doPageCheckSession(_pageUrl,_call,_needLogin) {
	let loginFlag = getLoginFlag();
	let nowDate = new Date();
	if (loginFlag && loginFlag.expireTime > nowDate.getTime()) {
		// 检查 session_key 是否过期
		wx.checkSession({
			// session_key 有效(为过期)
			success: function() {
				_call();
			},
			// session_key 过期
			fail: function() {
				// session_key过期
				doLogin(_call,_needLogin);
			}
		});
	} else {
		// 无登录态
		doLogin(_call,_needLogin);
	}
}

/**
 * 页面 session
 * @param {Object} _call 回调函数
 */
export function pageCheckSession(_pageUrl,_call) {
	doPageCheckSession(_pageUrl,_call,'0')
}

/**
 * 登录
 */
export function doLogin(callback = () => {},_needLogin) {

	wx.login({
		success: function(loginRes) {
			if (loginRes.code) {
				// TODO
				//请求服务后端登录
				requsetHcServerToLogin(loginRes, callback,_needLogin);
			} else {
				// 获取 code 失败
				console.log('调用wx.login获取code失败');
			}
		},
		fail: function(error) {
			// 调用 wx.login 接口失败
			console.log('调用wx.login获取code失败');
			console.log(error);
		}
	});
}
/**
 * 尝试服务器登录
 * 如果登录不成功 跳转登录页面
 */
export function requsetHcServerToLogin(loginRes, callback = () => {},_needLogin) {
	let defaultRawData =
		'{"nickName":"","gender":1,"language":"","city":"","province":"","country":"","avatarUrl":""}'; // 请求服务端的登录接口
	console.log('返回信息', loginRes);
	let _appId = '';
	_appId = getWAppId();
	requestNoAuth({
		url: url.loginUrl,
		method: 'post',
		data: {
			code: loginRes.code,
			// 临时登录凭证
			userInfo: JSON.parse(defaultRawData),
			// 用户非敏感信息
			signature: '',
			// 签名
			encryptedData: '',
			// 用户敏感信息
			iv: '', // 解密算法的向量
			appId: _appId

		},
		success: function(res) {
			if (res.statusCode == '401' && _needLogin != '1') {
				let data = res.data;
				saveOpenId(data.openId);
				wx.reLaunch({
					url: '/pages/login/showlogin?wAppId=' + _appId
				});
				return;
			}
			res = res.data;
			if (res.result == 0) {
				saveOwnerStorage(res.userInfo);
				saveUserLoginInfo(res.userInfo.userId, res.token)
				callback();
			} else {
				if( _needLogin != '1'){
					wx.reLaunch({
						url: '/pages/login/showlogin?wAppId=' + _appId
					});
				}
				return;
			}
		},
		fail: function(error) {
			// 调用服务端登录接口失败
			if (error.statusCode == 401) {
				uni.reLaunch({
					url: '/pages/login/login?wAppId=' + _appId
				});
				return;
			}
			console.log(error);
		}
	});
}

/**
 * 查询活动列表
 */
export function pageUserLogin(_obj) {
	uni.showLoading({
		title: '加载中',
		mask: true
	});
	return new Promise(
		(resolve, reject) => {
			requestNoAuth({
				url: url.loginOwnerUrl,
				method: "POST",
				data: JSON.stringify(_obj),
				//动态数据
				success: function(res) {
					uni.hideLoading();
					console.log("登录返回信息", res);
					if (res.statusCode != 200) {
						uni.showToast({
							icon: 'none',
							title: res.data
						});
						reject();
						return;
					}
					let _data = res.data;
					let _ownerInfo = _data.owner;
					saveOwnerStorage(_ownerInfo);
					saveUserLoginInfo(_ownerInfo.userId, _data.token, _data.key)
					resolve();
				},
				fail: function(e) {
					uni.hideLoading();
					reject();
				}
			});
		})
}

/**
 * @param {Object} options 页面数据
 */
export function getPageLoginCode(options) {
	return new Promise((resolve, reject) => {
		wx.login({
			success: function(loginRes) {
				if (loginRes.code) {
					resolve(loginRes.code);
				} else {
					// 获取 code 失败
					showInfo('微信登录失败');
				}
			},
			fail: function(error) {
				// 调用 wx.login 接口失败
				showInfo('微信登录失败');
			}
		});

	});
}
