import {
	wechatConfig,
	share
} from '@/api/wx';
// 加载日志
import * as log from './log.js'
import {
	isAndroid
} from './platform.js'
import store from '../store';
// 保存wx对象
import weixinObj from "@/plugin/jweixin-module/index.js";
// 保存分享数据
let shareData = '';
// 保存注册返回appId数据
let appId = '';
//保存路由对象
let router = '';
//微信登录
/**
 * @param {string} 当前页面地址信息
 */
export async function loginWinxin() {
	console.log('1');
	let pages, page, path;
	if (!router) {
		router = await setRouter();
	}
	try {
		pages = getCurrentPages();
		// 获取跳转前页面
		page = pages[pages.length - 1];
		// 获取跳转前路由地址
		path = page.route;
	} catch (e) {
		console.log(e);
		//TODO handle the exception
	}
	// 判断是否在登录页
	if (path != 'pages/redirect/redirect') {
		log.addLog('开始注册微信')
		weixindata().then(() => {
			// 调用
			try {
				weixinSq();
			} catch (e) {
				console.log(e);
				//TODO handle the exception
			}
		});
	}
};
// 微信授权登录
function weixinSq() {
	// 微信授权后跳转页面
	try {
		// 判断是否真实路由模式
		const type = router.mode === "history"?'':'/#'
		let ul = encodeURIComponent(store.state.baseURL + store.state.urlFile +type+ '/pages/redirect/redirect');
		// 打开微信授权页面
		let url =
			'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
			appId +
			'&redirect_uri=' +
			ul +
			'&response_type=code&scope=snsapi_userinfo&state=' +
			new Date().getTime() +
			'#wechat_redirect';
		window.location.href = url;
	} catch (e) {
		console.log(e);
		//TODO handle the exception
	}
};

// 微信注册
export async function weixindata(config) {
	let url;
	try {
		// 判断是否存在router
		if (!router) {
			router = await setRouter();
		}
		if (router.mode === "history") {
			// 在ios中时候注册为微信刚进入时候的页面
			if (!window.entryUrl) {
				window.entryUrl = location.href.split('#')[0]
			}
			url = isAndroid() ? location.href.split('#')[0] : window.entryUrl;
		}
		if (router.mode === "hash") {
			url = location.href.split('#')[0];
		}
		log.addLog('注册开始', url)
		console.log('开始注册', url);

	} catch (e) {
		console.log('错误', e);
	}
	return new Promise((ok, error) => {
		try {
			//注册微信信息
			wechatConfig({
					url
				})
				.then(({
					data
				}) => {
					try {
						// 保存appId
						appId = data.appId
						// 微信信息配置
						weixinObj.config({
							debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
							appId: data.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
							timestamp: data.timestamp, // 必填,生成签名的时间戳
							nonceStr: data.nonceStr, // 必填,生成签名的随机串
							signature: data.signature, // 必填,签名,见附录1
							jsApiList: data.jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
						});
						weixinObj.ready((e) => {
							log.addLog("注册完毕", data)
							console.log('注册完毕');
							ok(data)
						})
					} catch (e) {
						console.log(e)
					}
				})
				.catch(e => {
					error(e);
					console.log(e);
				});
		} catch (e) {
			console.log(e);
			//TODO handle the exception
		}
	})
}

// 判断分享调用方法
export function shareLoad(config) {
	console.log('开始调用分享')
	try {
		weixindata().then((e) => {
			// 判断有无自定义数据
			if (config) {
				shareFun(config)
			} else {
				// 判断是否已经缓存了默认数据
				if (shareData) {
					shareFun()
				} else {
					// 请求获取默认数据
					share({}).then(({
						data
					}) => {
						shareData = data.data
						shareFun()
					});
				}
			}
		})
	} catch (e) {
		console.log('报错', e)
		//TODO handle the exception
	}
}
// 配置分享数据
function shareFun(config) {
	try {
		console.log('再付分享内容', config);
		let mess;
		if (config) {
			mess = {
				link: config.link, // 分享链接
				imgUrl: config.imgUrl,
				desc: config.desc,
				title: config.title,
				success: config.success || function(e) {
					console.log(e);
				},
				fail: config.fail || function(e) {
					console.log(e);
				}
			}
		} else {
			const userInfo = uni.getStorageSync('userInfo')
			console.log(userInfo);
			const url = window.location.href + '?spread=' + userInfo.uid;
			url = url.replace(/[\?,&]{0,1}from=singlemessage/g, '');
			mess = {
				title: shareData.title,
				link: url, // 分享链接
				imgUrl: shareData.img, // 分享图标
				desc: shareData.synopsis,
				success: function() {
					// uni.showModal({
					// 	title: '分享',
					// 	content: '分享成功',
					// 	showCancel: false,
					// 	success: res => {
					//    console.log('分享成功回调接口');
					// 	},
					// 	fail: () => {},
					// 	complete: () => {}
					// });
				}
			}
		}
		// 获取仓库数据
		// 分享好友
		weixinObj.updateAppMessageShareData(mess);

		// 分享朋友圈
		weixinObj.updateTimelineShareData(mess)
	} catch (e) {
		console.log(e);
		//TODO handle the exception
	}
}

// 保存路由对象
export function setRouter(route) {
	return new Promise((ok, err) => {
		router = getApp().$router;
		console.log(router,'开始数据');
		if (!router) {
			const set = setInterval(() => {
				router = getApp().$router;
				console.log(router,'返回数据');
				if (router) {
					console.log(router,'结束');
					clearInterval(set)
					ok(router)
				}
			}, 100);
		}else{
			console.log(router,'成功');
			ok(router)
		}
	})
}

export default {
	weixinObj,
	shareData,
	appId,
	setRouter,
	shareLoad
}