import $store from '@/store'
export default {
	msg,
	str2hex,
	hex2str,
	ab2hex,
	inArray,
	getAge,
	getTime,
	getDate,
	getMonth,
	GetDateStr,
	PrefixZero,
	getBluetoothAdapter
}
// 2进制位数不足补0
function PrefixZero(num, n) {
	return (Array(n).join(0) + num).slice(-n);
}

function inArray(arr, key, val) {
	if (!arr || !arr.length || typeof arr != 'object' || !Array.isArray(arr)) {
		return -1
	}
	for (let i = 0; i < arr.length; i++) {
		if (!key) {
			if (arr[i] == val) {
				return i
			}
		} else if (arr[i][key] === val) {
			return i
		}
	}
	return -1;
}

function msg(str) {
	uni.showToast({
		title: str,
		icon: 'none'
	})
}

function ab2hex(buffer, split) {
	var hexArr = Array.prototype.map.call(
		new Uint8Array(buffer),
		function(bit) {
			return ('00' + bit.toString(16)).slice(-2)
		}
	)
	return hexArr.join(split);
}

function hex2str(arr) {
	let decoder = new TextDecoder('utf8')
	let uint8 = new Uint8Array(arr)
	let res = decoder.decode(uint8)
	return res
}

function str2hex(str) {
	let encoder = new TextEncoder('utf8')
	return encoder.encode(str)
}

function getBluetoothAdapter(err) {
	if (err.errMsg == "openBluetoothAdapter:fail auth denied" || err.errMsg ===
		"openBluetoothAdapter:fail auth deny" ||
		err.errMsg === "openBluetoothAdapter:fail authorize no response"
	) {
		uni.showModal({
			title: "提示",
			content: "需要您授权使用手机蓝牙",
			showCancel: false,
			success(modalSuccess) {
				uni.openSetting({
					success(settingdata) {
						if (settingdata.authSetting["scope.bluetooth"]) {
							uni.openBluetoothAdapter({
								success: e => {
									uni.showToast({
										title: "获取权限成功，请继续去测量",
										icon: "none"
									})
									$store.commit("changeBluetooth", true);
								},
								fail: err => {
									uni.showToast({
										title: "请打开手机蓝牙",
										icon: "none",
										duration: 1000,
									})
									console.log('初始化蓝牙失败:' + err.errMsg);
								}
							});
						} else {
							uni.showToast({
								title: "获取权限失败，将无法使用手机蓝牙进行测量",
								icon: "none"
							})
						}
					}
				})
			}
		})
	} else {
		uni.showToast({
			title: "请打开手机蓝牙",
			icon: "none",
			duration: 1000,
		})
	}
}

function getDate(type) {
	const date = new Date();
	let year = date.getFullYear();
	let month = date.getMonth() + 1;
	let day = date.getDate();
	month = month > 9 ? month : '0' + month;;
	day = day > 9 ? day : '0' + day;
	if (type === 'tow') {
		year = year - 2;
		return `${year}-${month}-${day}`;
	}
	if (type === 'start') {
		year = year;
		return `${year}-${month}-${day}`;
	}
	if (type === 'end') {
		year = year + 60;
		return `${year}-${month}-${day}`;
	}
	if (type == "m") {
		if (month == "01" || month == "03" || month == "05" || month == "07" || month == "08" || month == "10" ||
			month == "12") {
			return year + "/" + month + "/01" + "~" + year + "/" + month + "/31";
		} else if (month == "02") {
			if ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0)) {
				return year + "/" + month + "/01" + "~" + year + "/" + month + "/29";
			} else {
				return year + "/" + month + "/01" + "~" + year + "/" + month + "/28";
			};
		} else {
			return year + "/" + month + "/01" + "~" + year + "/" + month + "/30";
		};
	}
}

function GetDateStr(AddDayCount) {
	var dd = new Date();
	dd.setDate(dd.getDate() + AddDayCount); //获取AddDayCount天后的日期
	var y = dd.getFullYear();
	var m = (dd.getMonth() + 1) < 10 ? "0" + (dd.getMonth() + 1) : (dd.getMonth() + 1); //获取当前月份的日期，不足10补0
	var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate(); //获取当前几号，不足10补0
	return y + "-" + m + "-" + d;
}

// 获取当前日期
function getTime() {
	var date = new Date()
	var todate =
		((date.getMonth() + 1) < 10 ? ('0' + (date.getMonth() + 1)) : date.getMonth() +
			1) + '月' + (date.getDate() < 10 ? ('0' + date.getDate()) : date.getDate() + '日')
	return todate
}
// 根据出生日期获取年龄
function getAge(str) {
	var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})/);
	if (r == null) return false;

	var d = new Date(r[1], r[3] - 1, r[4]);
	var returnStr = "输入的日期格式错误！";

	if (d.getFullYear() == r[1] && (d.getMonth() + 1) == r[3] && d.getDate() == r[4]) {

		var date = new Date();
		var yearNow = date.getFullYear();
		var monthNow = date.getMonth() + 1;
		var dayNow = date.getDate();

		var largeMonths = [1, 3, 5, 7, 8, 10, 12], //大月， 用于计算天，只在年月都为零时，天数有效
			lastMonth = monthNow - 1 > 0 ? monthNow - 1 : 12, // 上一个月的月份
			isLeapYear = false, // 是否是闰年
			daysOFMonth = 0; // 当前日期的上一个月多少天

		if ((yearNow % 4 === 0 && yearNow % 100 !== 0) || yearNow % 400 === 0) { // 是否闰年， 用于计算天，只在年月都为零时，天数有效
			isLeapYear = true;
		}

		if (largeMonths.indexOf(lastMonth) > -1) {
			daysOFMonth = 31;
		} else if (lastMonth === 2) {
			if (isLeapYear) {
				daysOFMonth = 29;
			} else {
				daysOFMonth = 28;
			}
		} else {
			daysOFMonth = 30;
		}

		var Y = yearNow - parseInt(r[1]);
		var M = monthNow - parseInt(r[3]);
		var D = dayNow - parseInt(r[4]);
		if (D < 0) {
			D = D + daysOFMonth; //借一个月
			M--;
		}
		if (M < 0) { // 借一年 12个月
			Y--;
			M = M + 12; //
		}

		if (Y < 0) {
			returnStr = "出生日期有误！";

		} else if (Y === 0) {
			if (M === 0) {
				returnStr = D + "天";
			} else {
				returnStr = M + "个月";
			}
		} else {
			if (M === 0) {
				returnStr = Y + "岁";
			} else {
				returnStr = Y + "岁" + M + "个月";
			}
		}
	}
	return returnStr;
}

function getMonth(dates, months) {
	var d = new Date(dates.substring(0, 10));
	let year = d.getFullYear();
	var month = d.getMonth() + 1;
	if (Math.abs(months) > 12) {
		months = months % 12;
	};
	if (months != 0) {
		if (month + months > 12) {
			year++;
			month = (month + months) % 12;
		} else if (month + months < 1) {
			year--;
			month = 12 + month + months;
		} else {
			month = month + months;
		};
	};
	month = month < 10 ? "0" + month : month;
	var date = d.getDate();
	if (month == "01" || month == "03" || month == "05" || month == "07" || month == "08" || month == "10" ||
		month == "12") {
		return year + "/" + month + "/01" + "~" + year + "/" + month + "/31";
	} else if (month == "02") {
		if ((year % 4 == 0 && year % 100 != 0) || (year % 100 == 0 && year % 400 == 0)) {
			return year + '/' + month + "/01" + "~" + year + "/" + month + "/29";
		} else {
			return year + '/' + month + "/01" + "~" + year + "/" + month + "/28";
		};
	} else {
		return year + '/' + month + "/01" + "~" + year + "/" + month + "/30";
	};
};