import { isGetLocation } from "./location.js";

const tabBarList = [
	"/pages/index/index",
	"/pages/cat/cat",
	"/pages/shoppingCart/index",
	"/pages/my/my",
];

export default {
	// 跳转页面
	toUrl(url, type) {
		console.log(url);

		if (
			tabBarList.some((item) => url.indexOf(item) !== -1) &&
			type != "reLaunch"
		) {
			uni.switchTab({
				url: url,
			});

			return;
		}

		if (type == "redirectTo") {
			uni.redirectTo({
				url,
			});
		} else if (type == "reLaunch") {
			uni.reLaunch({
				url,
			});
		} else {
			uni.navigateTo({
				url,
			});
		}
	},

	// 后退页面
	backTo(num = 1) {
		const current = getCurrentPages();
		if (current.length <= 1) {
			this.toUrl("/pages/home/home");
		} else {
			uni.navigateBack({
				delta: num,
			});
		}
	},

	/**
	 * @des 复制
	 */
	copy(data, toast = "内容已复制") {
		uni.setClipboardData({
			data,
			success: () => {
				uni.$u.toast(toast);
			},
		});
	},

	/**
	 * @des 将 Date 转化为指定格式的String
	 * @des 月(m)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符，
	 * @des 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
	 * @des 例子： DateFormat("yyyy-MM-dd hh:mm:ss.s","2006-07-02") ==> 2006-07-02 08:09:04.423
	 * @param fmt
	 * @param date
	 * @returns {String}
	 */
	DateFormat(fmt, date) {
		const newDate = date || new Date();

		const o = {
			"M+": newDate.getMonth() + 1, // 月份
			"d+": newDate.getDate(), // 日
			"h+": newDate.getHours(), // 小时
			"m+": newDate.getMinutes(), // 分
			"s+": newDate.getSeconds(), // 秒
			"q+": Math.floor((newDate.getMonth() + 3) / 3), // 季度
			S: newDate.getMilliseconds(), // 毫秒
		};
		if (/(y+)/.test(fmt)) {
			fmt = fmt.replace(
				RegExp.$1,
				(newDate.getFullYear() + "").substr(4 - RegExp.$1.length)
			);
		}
		for (var k in o) {
			if (new RegExp("(" + k + ")").test(fmt)) {
				fmt = fmt.replace(
					RegExp.$1,
					RegExp.$1.length === 1 ?
						o[k] :
						("00" + o[k]).substr(("" + o[k]).length)
				);
			}
		}
		return fmt;
	},

	getRouterInfo() {
		let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
		let curRoute = routes[routes.length - 1].route // 获取当前页面路由，也就是最后一个打开的页面路由
		let curParam = routes[routes.length - 1].options || []; //获取路由参数

		const params = Object.entries(curParam).reduce((param, [key, val], index) => {
			if (index === 0) {
				return param + key + '=' + val
			}

			return param += '&' + key + '=' + val
		}, "?")

		return [curRoute, params]
	},

	loginOut() {
		const [curRoute, curRouteParam] = this.getRouterInfo()
		uni.setStorageSync("backPage", "/" + curRoute + curRouteParam)

		uni.removeStorageSync("token");
		uni.removeStorageSync("user_info");
		this.toUrl("/pages/login/index", "redirectTo");
	},

	kmUnit(m) {
		var v;
		if (typeof m === 'number' && !isNaN(m)) {
			if (m >= 1000) {
				v = (m / 1000).toFixed(2) + ' km'
			} else {
				v = m.toFixed(2) + ' m'
			}
		} else {
			v = '0 m'
		}
		return v;
	},

	objectToQueryString(obj) {
		var params = '';
		for (var key in obj) {
			if (obj.hasOwnProperty(key)) {
				if (params !== '') {
					params += '&';
				}
				params += encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]);
			}
		}
		return '?' + params;
	},

	oneValues(url) {
		var name, value;
		var str = url; //取得整个地址栏
		var num = str.indexOf("?");
		str = str.substr(num + 1); //取得所有参数   stringvar.substr(start [, length ]
		let obj = {};
		var arr = str.split("&"); //各个参数放到数组里
		for (var i = 0; i < arr.length; i++) {
			num = arr[i].indexOf("=");
			if (num > 0) {
				name = arr[i].substring(0, num);
				value = arr[i].substr(num + 1);
				obj[name] = value;
			}
		}
		return obj;
	},

	// 下载图片
	downloadImage(imageUrl) {
		return new Promise((resolve, reject) => {

			function downloadFile() {
				uni.downloadFile({
					url: imageUrl,
					success: function (res) {
						// 检查下载是否成功
						if (res.statusCode === 200) {
							console.log('图片下载成功：', res.tempFilePath);
							// 将图片保存到相册
							uni.saveImageToPhotosAlbum({
								filePath: res.tempFilePath,
								success: function () {
									console.log('图片保存成功');
									resolve(res.tempFilePath); // 返回下载的图片路径
								},
								fail: function (saveErr) {
									console.error('图片保存失败：', saveErr);
									reject(new Error('图片保存失败'));
								}
							});
						} else {
							// 下载失败，拒绝 Promise
							uni.showToast({
								title: "保存失败，请检查是否开启权限 (2)",
								icon: "none",
							});

							console.error('图片下载失败：', res);
							reject(new Error('图片下载失败'));
						}
					},
					fail: function (err) {
						uni.showToast({
							title: "保存失败，请检查是否开启权限 (1)",
							icon: "none",
						});

						// 下载失败，拒绝 Promise
						console.error('图片下载失败：', err);
						reject(err);
					}
				});
			}

			// #ifdef MP-WEIXIN
			//获取相册授权
			uni.getSetting({
				success(res) {
					if (!res.authSetting["scope.writePhotosAlbum"]) {
						uni.authorize({
							scope: "scope.writePhotosAlbum",
							success(e) {
								//这里是用户同意授权后的回调
								downloadFile();
							},
							fail(fail) {
								uni.showModal({
									title: "提示",
									content: "需要获取您的相册保存权限，请到小程序的设置中打开授权",
									success(res) {
										if (res.confirm) {
											wx.openSetting()
										}
									}
								})
							},
						});
					} else {
						//用户已经授权过了
						downloadFile();
					}
				},
			});
			// #endif


			// #ifdef MP-ALIPAY
			downloadFile();
			// #endif

		});
	},

	// 判断参数中是否存在 distributor_id 属性，并将其存储到本地
	// 将传入的 url 参数解析为对象，并保存到本地
	saveDistributorIdToLocal(params, url) {
		try {
			if (url) {
				return this.saveDistributorIdToLocal(this.oneValues(url))
			}

			if (params && typeof params === 'object' && 'distributor_id' in params) {
				// 如果 params 是一个对象，并且包含 distributor_id 属性，将其存储到本地
				const distributorId = params.distributor_id;
				uni.setStorageSync('distributor_id', distributorId);
				return distributorId
			} else {
				// 如果 params 不符合条件，则将 distributor_id 设置为 0
				uni.setStorageSync('distributor_id', 0);
			}
		} catch (error) {
			console.log(error);
		}
	},

	// 小程序跳转
	navigateToMiniProgramWithParams(appId, path, params) {
		uni.navigateToMiniProgram({
			appId: appId,
			path: path,
			extraData: params,
			success: function (res) {
				console.log('跳转成功', res);
			},
			fail: function () {
				uni.$u.toast("跳转失败:" + JSON.stringify({ appId, path, params }))
			}
		});
	},

	// 判断位置权限
	isGetLocation: isGetLocation,
};