import Request_ from '../../api/request';


class _init {
	
	// 登录完成回调(包含处理完成用户携带数据)
	UserLoginInitCollback = undefined;
	userInfor = {};
	// 微信登录之后获取到 参数
	openid : String = "";
	session_key : string = "";
	// Wechat = {};
	// 支付宝登录之后获取到的参数
	Apple = {
		access_token: "0",
		alipay_user_id: "0",
		auth_start: "0",
		expires_in: 0,
		re_expires_in: 0,
		refresh_token: "",
		user_id: "",
	};
	code = '';
	pay_type : number = 0;
	provider : "weixin" | "qq" | "sinaweibo" | "xiaomi" | "apple" | "univerify" = 'weixin';
	// 进入来源 Scan | Half
	referrerInfo:'Scan' | 'Half';
	// 初始参数
	__programParameter__ = null;
	/** 请求参数 */
	APIoptions = {};
	constructor(parameters) {
		// #ifdef MP-ALIPAY
		this['pay_type'] = 2;
		// #endif
		// #ifdef MP-WEIXIN
		this['pay_type'] = 1;
		// #endif
		/**
		 * 初始化来源
		 */
		// parameters.referrerInfo = {
		// 	path:"pages/index/index",
		// 	quer:{},
		// 	scene:1037,
		// 	referrerInfo:{"appId":"wxc8e2e1d28d15d2e3"},
		// 	extraData:{
		// 		"thrust_code":"4871020984",
		// 		code:"49750683"
		// 	},
		// 	mode:"embedded",
		// 	apiCategory:"embedded"
		// };
		if(parameters?.referrerInfo && Object.keys(parameters['referrerInfo'])['length']){
			this.referrerInfo = 'Half';
			/**
			 * 初始化参数
			 */
			this.__programParameter__ = parameters['referrerInfo']['extraData'];
			this.APIoptions = this['__programParameter__'];
		}else{
			this.referrerInfo = 'Scan';
			/**
			 * 初始化参数
			 */
			this.__programParameter__ = parameters;
			/**处理拿到的初始化参数 */
			this.InitParam();
			
		};
		

	}

	/** 获取来源 */
	get source(){
		return this['referrerInfo'];
	}

	
	// 推送播报
	// Pushbroadcast(data){
	// 	if(getApp()['globalData']['Pay_Status'] == 2) return;
	// 	Request_.GET({ url:"/MiniProgram/Order/cancelPaymentSound", data });
	// }

	Login() {
		let url : string = null;
		// #ifdef MP-ALIPAY
		url = '/MiniProgram/Api/alipayCodeLogin';
		this['pay_type'] = 2;
		// #endif
		// #ifdef MP-WEIXIN
		url = '/MiniProgram/Api/wechatCodeLogin';
		this['pay_type'] = 1;
		console.log(uni.login,this['provider'],'执行登录');
		// #endif
		uni.login({
			provider: this['provider'],
			success: loginRes => {
				console.log(loginRes['code'], 'code---');
				if (loginRes.code) {
					let data = null;
					// #ifdef MP-ALIPAY
					console.log(loginRes['code'], 'apple：code');
					data = { code: loginRes['code'] };
					// #endif

					// #ifdef MP-WEIXIN
					console.log(loginRes['code'], 'WeChat：code');
					data = { code: loginRes['code'], type: 1 };
					// #endif
					data['thrust_code'] = this['options']['thrust_code'] || '';
					data['invite_code'] = this['options']['invite_code'] || '';
					// return
					
					console.log(data,'data')
					this.userInfor = data;
					Request_.GET({ url, data }).then(res => {
						this.userInfor = {...this['userInfor'],...res['data']}
						uni.setStorageSync('token', res['data']['token']);
						console.log(res, '登录信息');
						// #ifdef MP-ALIPAY
						// let { openid, session_key } = res['data'];
						this['Apple'] = res['data'];
						// #endif
						// #ifdef MP-WEIXIN
						let { scan_openid, session_key } = res['data'];
						this['openid'] = scan_openid;
						this['session_key'] = session_key;
						// #endif
						console.log(this['UserLoginInitCollback'], 'UserLoginInitCollback');
						if (this['UserLoginInitCollback'] != null && typeof this['UserLoginInitCollback'] == 'function') {
							this.UserLoginInitCollback();
						}
					})
				} else {
					uni.showToast({
						title: '登录失败！未获取到code',
						icon: 'none',
						duration: 2000
					})
				}
			},
			fail:error=>{
				console.log(error,'error')
			}
		});
	}

	// 支付时获取指定平台字段
	get Getopenid() {
		// #ifdef MP-ALIPAY
		return this['Apple']['user_id'];
		// #endif
		// #ifdef MP-WEIXIN
		return this['openid'];
		// #endif
	}

	get options(){
		return this['APIoptions']
	}

	// 解析小程序初始参数
	InitParam() {
		console.log(this['__programParameter__'],this['source'],'__programParameter__');
		// 扫码进入
		if (this['__programParameter__']?.query?.q || this['__programParameter__']?.query?.scene || this['__programParameter__']?.query?.qrCode) {
			let searchParamToObj = '';
			searchParamToObj = this['__programParameter__']['query']?.q || this['__programParameter__']['query']?.scene || this['__programParameter__']['query']?.qrCode;
			console.log(searchParamToObj, 'searchParamToObj');
			const obj = {};
			const Para = this.escape2Html(decodeURIComponent(searchParamToObj));
			const _i = Para.indexOf('?');
			console.log(Para, _i, 'Para');
			if (~_i) {
				const _U = Para.slice(_i + 1, Para['length']);
				const _M = _U.split('&');
		
				for (let i = 0; i < _M['length']; i++) {
					const index = _M[i].indexOf("=");
					console.log(index, 'index');
					const KEY = _M[i].substring(0, index);
					const VAL = _M[i].substring(index + 1, _M[i].length);
					obj[KEY] = VAL;
				};
				this.APIoptions = obj;
		
			} else {
				this.APIoptions = {};
			}
		} else {
			// 商户端扫码进入
			try{
				this.APIoptions = this['__programParameter__']['query'];
			}catch(e){
				this.APIoptions = {};
				//TODO handle the exception
			}
		}

	}

	// 字符转义
	escape2Html(str) {
		var arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' };
		return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) { return arrEntities[t]; });
	};

}


export default _init;