import {
	configShare
} from "@/api/home.js"
export default {
	//处理图片地址
	imgUrls: (val) => {
		if (val) {
			return val.indexOf('http') === -1 ? 'https://guess-shop.oss-cn-beijing.aliyuncs.com' + val : val
		}
	},
	// 富文本处理图片显示
	richTextImg: (val) => {
		if (val) {
			return val.replace(/\<img/gi, '<img style="max-width:100%;height:auto;display:block;" ')
		}
	},
	// 高德地图坐标转腾讯地图坐标的转换函数
	gcj02tobd09: (lng, lat) => {
		var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
		var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_pi);
		var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_pi);
		var bd_lng = z * Math.cos(theta) + 0.0065;
		var bd_lat = z * Math.sin(theta) + 0.006;
		return [bd_lng, bd_lat];
	},
	// 距离显示格式处理
	distance: (val) => {
		if (val) {
			let distance = val / 1000
			if (distance < 1) {
				return Math.round(distance * 1000) + 'm'
			} else {
				return Math.round(distance * 100) / 100 + 'km'
			}
		}
		return ''
	},
	// 格式化日期为 YYYY-MM-DD
	formatDate: (date) => {
		const d = new Date(date);
		const year = d.getFullYear();
		const month = (d.getMonth() + 1).toString().padStart(2, '0');
		const day = d.getDate().toString().padStart(2, '0');
		return `${year}-${month}-${day}`;
	},
	// 格式化日期为 MM/DD
	formatDate1: (dateString) => {
		const date = new Date(dateString);
		const month = String(date.getMonth() + 1).padStart(2, '0');
		const day = String(date.getDate()).padStart(2, '0');
		return `${month}/${day}`;
	},

	/**
	 * 格式化时间戳
	 * @param {number} timestamp - 时间戳
	 * @param {string} format - 格式类型，支持 'yyyy-MM-dd HH:mm', 'yyyy-MM-dd HH:mm:ss', 'yyyy-MM-dd'
	 * @returns {string} 格式化后的日期字符串
	 */
	mFormatDate(timestamp, format = 'yyyy-MM-dd HH:mm:ss') {
		if (!timestamp) return '';

		const date = new Date(timestamp);
		const year = date.getFullYear();
		const month = String(date.getMonth() + 1).padStart(2, '0');
		const day = String(date.getDate()).padStart(2, '0');
		const hours = String(date.getHours()).padStart(2, '0');
		const minutes = String(date.getMinutes()).padStart(2, '0');
		const seconds = String(date.getSeconds()).padStart(2, '0');

		switch (format) {
			case 'yyyy-MM-dd HH:mm':
				return `${year}-${month}-${day} ${hours}:${minutes}`;
			case 'yyyy-MM-dd':
				return `${year}-${month}-${day}`;
			case 'yyyy-MM-dd HH:mm:ss':
			default:
				return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
		}
	},

	//复制
	copyTxt(text) {
		uni.setClipboardData({
			data: text,
			success: () => {
				uni.showToast({
					title: '复制成功',
					icon: 'none'
				});
			},
			fail: (err) => {
				uni.showToast({
					title: '复制失败',
					icon: 'none'
				});
				console.error(err);
			}
		});
	},
	// 处理价格样式
	// priceStyle: (val) => {
	//   if (val) {
	//     let arr = val.split('.')
	//     return '￥<span>' + arr[0] + '</span>' + arr[1]
	//   }
	//   return ''
	// }
	// skipWeb: (path, title) => {
	//   if (path === "#") {
	//     uni.showToast({
	//       icon: 'none',
	//       title: '敬请期待'
	//     })
	//     return false
	//   }
	//   uni.navigateTo({
	//     url: `/pages/web-view/web?path=${encodeURIComponent(path)}&title=${title || ''}`,
	//     complete: () => {
	//       oldApps = null;
	//     }
	//   });
	// },
	openPage: (data = {}) => {
		switch (Number(data.jumpType)) {
			case 0:
				// 内部页面
				try {
					uni.navigateTo({
						url: data.innerPageCode,
						fail: err => {
							uni.switchTab({
								url: data.innerPageCode
							});
						}
					});
				} catch (err) {
					console.log('未配置页面')
				}
				break;
			case 1:
				// 外部链接
				// skipWeb(data.outsideAddress, data.name)
				if (data.outsideAddress === "#") {
					// uni.showToast({
					//   icon: 'none',
					//   title: '敬请期待'
					// })
					return false
				}
				uni.navigateTo({
					url: `/pages/web-view/web?path=${encodeURIComponent(data.outsideAddress)}&title=${data.name || ''}`,
					complete: () => {
						// oldApps = null;
					}
				});
				break;
			case 2:
				// 内部资源模型
				if (data.resourceModel == 1) {
					// 公告
					uni.navigateTo({
						url: `/pages/home/noticeDetails?noticeId=${data.resourceModelId}`
					})
				} else if (data.resourceModel == 2) {
					// 积分商品
					uni.navigateTo({
						url: `/pages/giftPackageCenter/goodsDetails?productId=${data.resourceModelId}`
					})
				} else if (data.resourceModel == 3) {
					// 商户
					uni.navigateTo({
						url: `/pages/home/scenicSpotDetails?businessId=${data.resourceModelId}`
					})
				} else {
					uni.showToast({
						icon: 'none',
						title: '敬请期待'
					})
					break;
				}
		}
	},
	pagination(total, currentPageNum, currentPageSize) {
		let totalPage = 0
		if (total > 0) {
			if (total / currentPageSize > parseInt(total / currentPageSize)) {
				totalPage = parseInt(total / currentPageSize) + 1
			} else {
				totalPage = parseInt(total / currentPageSize);
			}
			if (currentPageNum < totalPage) {
				return 'more'
			}
		}
		return 'noMore'
	},
	/**
	 * @param {Function} func
	 * @param {number} wait
	 * @param {boolean} immediate
	 * @return {*}
	 */
	debounce(func, wait, immediate) {
		let timeout, args, context, timestamp, result

		const later = function() {
			// 据上一次触发时间间隔
			const last = +new Date() - timestamp

			// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
			if (last < wait && last > 0) {
				timeout = setTimeout(later, wait - last)
			} else {
				timeout = null
				// 如果设定为immediate===true，因为开始边界已经调用过了此处无需调用
				if (!immediate) {
					result = func.apply(context, args)
					if (!timeout) context = args = null
				}
			}
		}

		return function(...args) {
			context = this
			timestamp = +new Date()
			const callNow = immediate && !timeout
			// 如果延时不存在，重新设定延时
			if (!timeout) timeout = setTimeout(later, wait)
			if (callNow) {
				result = func.apply(context, args)
				context = args = null
			}

			return result
		}
	},
	// // 获取元素高度
	// getElHeight (el) {
	//   return new Promise(resolve => {
	//     const query = uni.createSelectorQuery().in(this)
	//     query.select(el).boundingClientRect(data => {
	//       resolve(data.height)
	//     }).exec()
	//   })
	// },
	// 手机号脱敏
	desensitizePhoneNumber(phoneNumber) {
		if (typeof phoneNumber !== 'string' || phoneNumber.length !== 11) {
			throw new Error('请输入有效的11位手机号');
		}
		return phoneNumber.slice(0, 3) + '****' + phoneNumber.slice(7);
	},
	// 获取分享配置
	getConfigShare() {
		return new Promise((re, so) => {
			configShare().then(res => {
				re(res.data)
			}).catch(e => so(e))
		})
	},

	// 定位授权
	async getLocation() {
		return new Promise((resolve, reject) => {
			let that = this;
			// 1、判断手机定位服务【GPS】 是否授权
			uni.getSystemInfo({
				success(res) {
					// console.log("判断手机定位服务是否授权:", res);
					let locationEnabled = res.locationEnabled; //判断手机定位服务是否开启
					let locationAuthorized = res.locationAuthorized; //判断定位服务是否允许微信授权
					// console.log("判断手机定位服务是否开启",locationEnabled);
					// console.log("判断定位服务是否允许微信授权",locationAuthorized);
					if (locationEnabled == false || locationAuthorized == false) {
						//手机定位服务（GPS）未授权
						uni.showToast({
							title: '请打开手机GPS',
							icon: 'none',
						});
						resolve(false);
					} else {
						//手机定位服务（GPS）已授权
						// 2、判断微信小程序是否授权位置信息
						// 微信小程序已授权位置信息
						uni.authorize({
							//授权请求窗口
							scope: 'scope.userLocation', //授权的类型
							success: async (res) => {
								resolve(await that.fnGetlocation());
							},
							fail: (err) => {
								err = err['errMsg'];
								uni.showModal({
										content: '需要授权位置信息',
										confirmText: '确认授权',
									}).then((obj) => {
										console.log('obj', obj);
										if (obj.confirm) {
											uni.openSetting({
												success: async (set) => {
													if (set.authSetting[
															'scope.userLocation'
														]) {
														// 授权成功
														uni.showToast({
															title: '授权成功',
															icon: 'none',
														});
														resolve(
															await that.fnGetlocation()
														);
													} else {
														// 未授权
														uni.showToast({
															title: '授权失败,请重新授权',
															icon: 'none',
														});
														uni.showModal({
															title: '授权',
															content: '获取授权' +
																'失败,是否前往授权设置？',
															success: function(result) {
																if (result.confirm) {
																	uni.openSetting();
																}
															},
															fail: function() {
																uni.showToast({
																	title: '系统错误！',
																	icon: 'none',
																});
															},
														});
													}
												},
											});
										} else {
											resolve(false);
											// 取消授权
											uni.showToast({
												title: '你拒绝了授权，无法获得周边信息',
												icon: 'none',
											});
										}
									});
							},
							// async complete(res) {
							//   // console.log('授权弹框', res);
							//   if (res.errMsg == 'authorize:ok') {
							//     resolve(await fnGetlocation());
							//   } else {
							//     uni.showModal({
							//       title: '授权',
							//       content: '获取授权失败,是否前往授权设置？',
							//       success: function (result) {
							//         if (result.confirm) {
							//           uni.openSetting();
							//         }
							//       },
							//       fail: function () {
							//         uni.showToast({
							//           title: '系统错误！',
							//           icon: 'none',
							//         });
							//       },
							//     });
							//   }
							// },
						});
					}
				},
			});
		});
	},
	// 定位获取
	async fnGetlocation() {
		return new Promise((resolve, reject) => {
			let that = this;
			let bindList = {
				long: '',
				lat: '',
				longlat: '',
				isLocated: false,
			};
			uni.getLocation({
				type: 'wgs84', //默认为 wgs84 返回 gps 坐标
				geocode: 'true',
				isHighAccuracy: 'true',
				accuracy: 'best', // 精度值为20m
				success: function(res) {
					let platform = uni.getSystemInfoSync().platform;
					if (platform == 'ios') {
						//toFixed() 方法可把 Number 四舍五入为指定小数位数的数字。
						bindList.long = res.longitude.toFixed(6);
						bindList.lat = res.latitude.toFixed(6);
					} else {
						bindList.long = res.longitude;
						bindList.lat = res.latitude;
					}
					resolve(bindList);
				},
				fail(err) {
					if (
						err.errMsg ===
						'getLocation:fail 频繁调用会增加电量损耗，可考虑使用 wx.onLocationChange 监听地理位置变化'
					) {
						uni.showToast({
							title: '请勿频繁定位',
							icon: 'none',
						});
					}
					if (err.errMsg === 'getLocation:fail auth deny') {
						// 未授权
						uni.showToast({
							title: '无法定位，请重新获取位置信息',
							icon: 'none',
						});
						authDenyCb && authDenyCb();
						bindList.isLocated = false;
						resolve(bindList);
					}
					if (err.errMsg === 'getLocation:fail:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF') {
						uni.showModal({
							content: '请开启手机定位服务',
							showCancel: false,
						});
					}
				},
			});
		});
	}



}