import applist from '@/api/modules/applist.js'
import sha256 from 'crypto-js/sha256'
import request from '@/api/request'
import QRCode from 'qrcode'
import dayjs from 'dayjs'
import wxUtils from './modules/wx.js'
import route from './modules/route.js'
dayjs.locale('zh-cn')

let goMiniAppFlag = false

const utils = {
	mapToUrlQuery(map) {
		let str = ""
		if (typeof map !== 'object') {
			return false
		}
		for (const key in map) {
			if (Object.hasOwnProperty.call(map, key)) {
				str += (key + "=" + map[key])+"&"

			}
		}
		// console.log(str)
		return str

	},
	//生成二维码图片
	async qrcodeGenerate(data) {
		let qrcodeRes = await QRCode.toString(data, {
			margin: 0,
			errorCorrectionLevel: 'H'
		});
		return 'data:image/svg+xml;base64,' + Buffer(qrcodeRes).toString('base64');
	},
	//引入路由相关函数
	route,
	//引入微信相关utils
	wxUtils,
	//引入moment模块
	dayjs,
	//临时测试接口请求
	testReq(data) {
		return request(data)
	},

	//vant通知组件调用函数
	Toast(title) {
		wx.showToast({
			title,
			icon: 'none'
		})
	},
	//防抖函数
	debounce(func, fnThis, wait) {
		var timer;
		return () => {
			timer && clearTimeout(timer);
			timer = setTimeout(() => {
				func.call(fnThis)
				timer = null
			}, wait);
		};
	},
	//节流函数
	throttling(func, fnThis, wait) {
		var timer;
		return () => {
			clearTimeout(timer);
			timer = setTimeout(func.bind(fnThis), wait);
		};
	},
	//跳转小程序
	goMiniApp(data, item) {

		if (goMiniAppFlag) return
		goMiniAppFlag = true

		let myData = JSON.parse(data)
		wx.navigateToMiniProgram({
			...myData,
			success: (res) => {
				// 打开成功
				goMiniAppFlag = false
				item && applist.BrowseRecordAdd(item.id)
			},
			fail: () => {
				goMiniAppFlag = false
			}
		})

	},
	//跳转页面
	goPage(url, type, data) {
		if (type == 'reLaunch') {
			uni.reLaunch({
				url
			});
			return
		}
		if (type == 'redirectTo') {
			uni.redirectTo({
				url
			});
			return
		}
		uni.navigateTo({
			url,
			success: function (res) {
				// 通过eventChannel向被打开页面传送数据
				res.eventChannel.emit('passParameters', data)
			}
		});
	},
	//页面接受参数
	goPageGetData() {
		return new Promise((res) => {
			const eventChannel = this.getOpenerEventChannel()
			eventChannel.on('passParameters', function (data) {
				res(data)
			})
		})
	},
	//返回今天明天后天周几
	getDay(date) {
		let UTCDay = new Date(date).getUTCDay()
		let jetLag = new Date(date).getTime() - new Date().getTime()
		let dayDif = jetLag / (1000 * 60 * 60 * 24)
		if (dayDif < 2) {
			if (dayDif < 0) {
				return '今天'
			}
			if (dayDif < 1) {
				return '明天'
			}
			if (dayDif < 2) {
				return '后天'
			}
		}
		switch (UTCDay) {
			case 0:
				return '周天';
			case 1:
				return '周一';
			case 2:
				return '周二';
			case 3:
				return '周三';
			case 4:
				return '周四';
			case 5:
				return '周五';
			case 6:
				return '周六';
		}
	}
}


export default utils
