import md5 from "./md5.min";
const HOSTARR = {
	'development': 'https://bd-fangke.ali251.langye.net',
	'production': 'https://bd-fangke.ali251.langye.net'
}; // 审核状态

const HOST = HOSTARR[process.env
	.NODE_ENV]; //"https://tiantianxinye.365care.langye.net/";//HOSTARR[process.env.NODE_ENV];//


const formatTime = date => {
	const year = date.getFullYear();
	const month = date.getMonth() + 1;
	const day = date.getDate();
	return [year, month, day].map(formatNumber).join('-');
};

const user_info_key = "userInfo_token";
const userInfo_BD_token = "userInfo_BD_token"
const user_key = "userInfo";

const getUserInfo = (cb, refresh) => {
	cb = cb || function() {}
	refresh = refresh || false
	if (!refresh) {
		let user_info = uni.getStorageSync(user_key)
		if (!isNull(user_info)) {
			cb(user_info)
			return
		}
	}
	request({
		api: '/api/mobile/user/show',
		utilSuccess: function(res) {
			uni.setStorageSync(user_key, res)
			cb(res)
		},
		utilFail: function(res) {}
	})
}

const getOpenidInfo = (cb, refresh) => {
	cb = cb || function() {}
	refresh = refresh || false
	if (!refresh) {
		let user_info = uni.getStorageSync(user_info_key)
		if (!isNull(user_info)) {
			cb(user_info)
			return
		}
	}

	uni.login({
		provider: 'weixin',
		success: (res) => {
			console.log(res.code);
			let url = HOST + '/api/mobile/user/login?code=' + res.code;
			uni.request({
				url: url,
				method: 'GET',
				success: result => {
					// if(result.errmsg){
					// 	uni.showToast({
					// 		title:result.errmsg,
					// 		duration:2000
					// 	})
					// 	return
					// }
					let user_info = result.data
					uni.setStorageSync(user_info_key, user_info)
					cb(user_info)
				}
			});
		}
	});
}



const getUserProfile = (cb) => {
	cb = cb || function() {}

	wx.getUserProfile({
		desc: '用于完善会员资料',
		success: (res) => {
			uni.setStorageSync('user_profile', res.userInfo)
			cb(res.userInfo)
		}
	})
}






const formatTimeAll = date => {
	const year = date.getFullYear();
	const month = date.getMonth() + 1;
	const day = date.getDate();
	const hour = date.getHours();
	const minute = date.getMinutes();
	const second = date.getSeconds();
	return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(
		':');
};

const formatNumber = n => {
	n = n.toString();
	return n[1] ? n : '0' + n;
}; // 快捷显示alert


const alert = msg => {
	uni.showModal({
		title: '',
		content: msg,
		showCancel: false
	});
}; // 订单状态

const toast = msg => {
	// setTimeout(function() {
	// 	uni.showToast({
	// 		icon: "none",
	// 		title: msg,
	// 		duration: 2000
	// 	})
	// }, 2000)

	uni.showModal({
		title: '',
		content: msg,
		showCancel: false
	});

}; // 订单状态


const orderStatusDic = {
	'0': '待确认',
	'10': '待派单',
	'20': '进行中',
	'100': '已完成'
}; // 审核状态

const auditStatusDic = {
	'0': '待审核',
	'1': '已审核',
	'-1': '已拒绝'
}; // 请求封装

const request = options => {
	if (!options.customLoading) {
		uni.showLoading({
			title: '正在加载'
		});
	} else {
		// 当前页面请求数量+1
		// if (options.bindThis) {
		// 	options.bindThis.setData({
		// 		//loadingCount: options.bindThis.data.loadingCount + 1
		// 	});
		// }
	}

	options.url = HOST + options.api;
	options.header = {
		...options.header,
		//'Accept': 'application/json',
		//'Connection': 'keep-alive'
		//'content-type': 'application/json'
	}; // 如果已登录,请求中拼openId

	var access_token = uni.getStorageSync(user_info_key).token;
	var access_bd_token = uni.getStorageSync(userInfo_BD_token).token;
	
	var request_token = access_token
	if(options.requestType=='bd'){
		request_token = access_bd_token
	}
	// var request_token = access_bd_token?access_bd_token:access_token
	// console.log(request_token)
	if (isLogin()) {
		options.data = {
			...options.data,
			'token': request_token
		};
	} // 如果是POST方法


	if (options.method == 'POST' && !isNull(request_token)) {
		// 拼时间戳
		options.data.ts = new Date().getTime();
	}

	uni.request({
		...options,
		success: function(res) {
			uni.hideLoading();
			if (res.statusCode != 200) {
				if (options.utilFail != undefined) {
					if (res.statusCode == 401) {
						uni.clearStorageSync();
						uni.navigateTo({
							url: '/pages/index/index'
						});
					} else {
						options.utilFail('TODO: 特殊处理非200错误(' + res.statusCode + ')');
					}
				}
			} else {
				if (res.data.hasOwnProperty("errcode")) {
					if (options.utilFail != undefined) {
						options.utilFail(res.data.errmsg || '接口发生未知错误');
						// setTimeout(function(){
						// 	if(res.data.errcode==40001){
						// 		uni.clearStorageSync();
						// 		uni.navigateTo({
						// 			url: '/pages/index/index'
						// 		});
						// 	}
						// },1000)
					} else {
						options.utilFail(res.data.errmsg);
					}
				} else {
					if (options.utilSuccess != undefined) {
						options.utilSuccess(res.data);
					}
				}
			}
		},
		fail: options.utilFail,
		complete: function(res) {
			if (!options.customLoading) {
				uni.hideNavigationBarLoading();

			} else {
				// 当前页面请求数量-1
				// if (options.bindThis) {
				// 	options.bindThis.setData({
				// 		loadingCount: options.bindThis.data.loadingCount - 1
				// 	});
				// }
			}
		}
	});
}; // 提交formID封装



const payOrder = (orderID, orderType, success, fail) => {
	uni.request({
		url: HOST + 'WxPay/ToPay?openId=' + uni.getStorageSync(user_info_key).WeChatOpenID +
			'&orderId=' +
			orderID + '&OrderType=' + orderType,
		method: 'GET',
		header: {
			'content-type': 'application/json'
		},
		success: function(res) {
			// 内容为空, 代表失败
			if (res.data == '') {
				fail('当前网络状况不好');
				return;
			} // 去掉转义字符


			var pureStr = res.data.replace(/\\/g, '');
			res.data = JSON.parse(pureStr);
			var index = res.data.package.indexOf('=') + 1;
			var prepayId = res.data.package.substring(index); // wxpay

			uni.requestPayment({
				timeStamp: res.data.timeStamp,
				nonceStr: res.data.nonceStr,
				package: res.data.package,
				signType: res.data.signType,
				paySign: res.data.paySign,
				success: function(res) {
					success(res); // 发送成功通知

					request({
						api: 'WxPay/PayTemplateMsg',
						data: {
							prepay_id: prepayId,
							orderId: orderID,
							isSuccess: 1,
							failMsg: '',
							xType: orderType
						}
					});
				},
				fail: function(res) {
					fail(res);
					var errMsg = res == 'requestPayment:fail cancel' ? '用户取消支付' :
						res; // 发送失败通知

					request({
						api: 'WxPay/PayTemplateMsg',
						data: {
							prepay_id: prepayId,
							orderId: orderID,
							isSuccess: 0,
							failMsg: errMsg,
							xType: orderType
						}
					});
				}
			});
		},
		fail: function(err) {
			fail('当前网络状况不好');
		}
	});
}; // 判断是否已登录（同时有open-id和PhoneNum, 则认为已登录）

const isLogin = () => {
	var userInfo = uni.getStorageSync(user_info_key);
	var userInfoBDtoken = uni.getStorageSync(userInfo_BD_token);
	return !isNull(userInfo.token) || !isNull(userInfoBDtoken.token);
}; // 判断是否为空


const isNull = p => {
	return p == '' || p == undefined || p == null || p == 'undefined' || p == 'null';
}; // 正则



const phoneRegex = /^1[3456789]\d{9}$/;
const idCardRegex = /^\d{17}([0-9]|X)$/; // 去掉特殊字符

const filterSpecialChars = str => {
	return str.replace(/[^\u4e00-\u9fa5a-zA-Z0-9\w]/g, '');
}; // 生成随机字符串


const randomStr = length => {
	var ret = '';
	var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
		'i', 'j',
		'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C',
		'D', 'E',
		'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
		'Y', 'Z'
	];

	for (var i = 0; i < length; i++) {
		var randomIndex = Math.round(Math.random() * (arr.length - 1));
		ret += arr[randomIndex];
	}

	return ret;
}; // proType对应的中文描述

const weekdayArr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']; // 是否合法的身份证

const isValidCardID = cardID => {
	// Step1: 先判断格式
	if (!idCardRegex.test(cardID)) return false; // Step2: 校验最后一位

	var code = cardID.split(''); //加权因子

	var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; //校验位

	var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
	var sum = 0;
	var ai = 0;
	var wi = 0;

	for (var i = 0; i < 17; i++) {
		ai = code[i];
		wi = factor[i];
		sum += ai * wi;
	}

	var last = parity[sum % 11];
	return parity[sum % 11] == code[17];
};

const shareInfo = {
	title:"",
	imageUrl:"/static/share.jpg"
}
/**  
 * UTF16和UTF8转换对照表  
 * U+00000000 – U+0000007F   0xxxxxxx  
 * U+00000080 – U+000007FF   110xxxxx 10xxxxxx  
 * U+00000800 – U+0000FFFF   1110xxxx 10xxxxxx 10xxxxxx  
 * U+00010000 – U+001FFFFF   11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  
 * U+00200000 – U+03FFFFFF   111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
 * U+04000000 – U+7FFFFFFF   1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
 */


var Base64 = {
	// 转码表  
	table: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
		'T', 'U',
		'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
		'o', 'p',
		'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8',
		'9', '+',
		'/'
	],
	UTF16ToUTF8: function(str) {
		var res = [],
			len = str.length;

		for (var i = 0; i < len; i++) {
			var code = str.charCodeAt(i);

			if (code > 0x0000 && code <= 0x007F) {
				// 单字节，这里并不考虑0x0000，因为它是空字节  
				// U+00000000 – U+0000007F  0xxxxxxx  
				res.push(str.charAt(i));
			} else if (code >= 0x0080 && code <= 0x07FF) {
				// 双字节  
				// U+00000080 – U+000007FF  110xxxxx 10xxxxxx  
				// 110xxxxx  
				var byte1 = 0xC0 | code >> 6 & 0x1F; // 10xxxxxx  

				var byte2 = 0x80 | code & 0x3F;
				res.push(String.fromCharCode(byte1), String.fromCharCode(byte2));
			} else if (code >= 0x0800 && code <= 0xFFFF) {
				// 三字节  
				// U+00000800 – U+0000FFFF  1110xxxx 10xxxxxx 10xxxxxx  
				// 1110xxxx  
				var byte1 = 0xE0 | code >> 12 & 0x0F; // 10xxxxxx  

				var byte2 = 0x80 | code >> 6 & 0x3F; // 10xxxxxx  

				var byte3 = 0x80 | code & 0x3F;
				res.push(String.fromCharCode(byte1), String.fromCharCode(byte2), String.fromCharCode(
					byte3));
			} else if (code >= 0x00010000 && code <= 0x001FFFFF) { // 四字节  
				// U+00010000 – U+001FFFFF  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  
			} else if (code >= 0x00200000 && code <= 0x03FFFFFF) { // 五字节  
				// U+00200000 – U+03FFFFFF  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
			} else
			/** if (code >= 0x04000000 && code <= 0x7FFFFFFF)*/
			{ // 六字节  
				// U+04000000 – U+7FFFFFFF  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
			}
		}

		return res.join('');
	},
	UTF8ToUTF16: function(str) {
		var res = [],
			len = str.length;
		var i = 0;

		for (var i = 0; i < len; i++) {
			var code = str.charCodeAt(i); // 对第一个字节进行判断  

			if ((code >> 7 & 0xFF) == 0x0) {
				// 单字节  
				// 0xxxxxxx  
				res.push(str.charAt(i));
			} else if ((code >> 5 & 0xFF) == 0x6) {
				// 双字节  
				// 110xxxxx 10xxxxxx  
				var code2 = str.charCodeAt(++i);
				var byte1 = (code & 0x1F) << 6;
				var byte2 = code2 & 0x3F;
				var utf16 = byte1 | byte2;
				res.push(Sting.fromCharCode(utf16));
			} else if ((code >> 4 & 0xFF) == 0xE) {
				// 三字节  
				// 1110xxxx 10xxxxxx 10xxxxxx  
				var code2 = str.charCodeAt(++i);
				var code3 = str.charCodeAt(++i);
				var byte1 = code << 4 | code2 >> 2 & 0x0F;
				var byte2 = (code2 & 0x03) << 6 | code3 & 0x3F;
				utf16 = (byte1 & 0x00FF) << 8 | byte2;
				res.push(String.fromCharCode(utf16));
			} else if ((code >> 3 & 0xFF) == 0x1E) { // 四字节  
				// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx  
			} else if ((code >> 2 & 0xFF) == 0x3E) { // 五字节  
				// 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
			} else
			/** if (((code >> 1) & 0xFF) == 0x7E)*/
			{ // 六字节  
				// 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx  
			}
		}

		return res.join('');
	},
	encode: function(str) {
		if (!str) {
			return '';
		}

		var utf8 = this.UTF16ToUTF8(str); // 转成UTF8  

		var i = 0; // 遍历索引  

		var len = utf8.length;
		var res = [];

		while (i < len) {
			var c1 = utf8.charCodeAt(i++) & 0xFF;
			res.push(this.table[c1 >> 2]); // 需要补2个=  

			if (i == len) {
				res.push(this.table[(c1 & 0x3) << 4]);
				res.push('==');
				break;
			}

			var c2 = utf8.charCodeAt(i++); // 需要补1个=  

			if (i == len) {
				res.push(this.table[(c1 & 0x3) << 4 | c2 >> 4 & 0x0F]);
				res.push(this.table[(c2 & 0x0F) << 2]);
				res.push('=');
				break;
			}

			var c3 = utf8.charCodeAt(i++);
			res.push(this.table[(c1 & 0x3) << 4 | c2 >> 4 & 0x0F]);
			res.push(this.table[(c2 & 0x0F) << 2 | (c3 & 0xC0) >> 6]);
			res.push(this.table[c3 & 0x3F]);
		}

		return res.join('');
	},
	decode: function(str) {
		if (!str) {
			return '';
		}

		var len = str.length;
		var i = 0;
		var res = [];

		while (i < len) {
			var code1 = this.table.indexOf(str.charAt(i++));
			var code2 = this.table.indexOf(str.charAt(i++));
			var code3 = this.table.indexOf(str.charAt(i++));
			var code4 = this.table.indexOf(str.charAt(i++));
			var c1 = code1 << 2 | code2 >> 4;
			var c2 = (code2 & 0xF) << 4 | code3 >> 2;
			var c3 = (code3 & 0x3) << 6 | code4;
			res.push(String.fromCharCode(c1));

			if (code3 != 64) {
				res.push(String.fromCharCode(c2));
			}

			if (code4 != 64) {
				res.push(String.fromCharCode(c3));
			}
		}

		return this.UTF8ToUTF16(res.join(''));
	}
};
module.exports = {
	HOST: HOST,
	formatTime: formatTime,
	formatTimeAll: formatTimeAll,
	formatNumber: formatNumber,
	alert: alert,
	getOpenidInfo: getOpenidInfo,
	request: request,
	payOrder: payOrder,
	isLogin: isLogin,
	isNull: isNull,
	phoneRegex: phoneRegex,
	idCardRegex: idCardRegex,
	filterSpecialChars: filterSpecialChars,
	randomStr: randomStr,
	weekdayArr: weekdayArr,
	Base64: Base64,
	orderStatusDic: orderStatusDic,
	auditStatusDic: auditStatusDic,
	getUserProfile: getUserProfile,
	getUserInfo: getUserInfo,
	toast: toast,
	isValidCardID:isValidCardID,
	shareInfo:shareInfo
	
};
