// mixins/share.js
import request from '@/utils/request'
export default {
	methods: {
		formatPriceNumber(num) {
			num = Number(num)
			let formatted;
			formatted = num.toFixed(2);
			// 根据数字大小确定保留的小数位数
			// if (num >= 100) {
			//   // 大于等于100时，不保留小数
			//   formatted = Math.floor(num).toString();
			// } else if (num >= 10) {
			//   // 大于等于10时，保留1位小数
			//   formatted = num.toFixed(1);
			// } else {
			//   // 其他情况，保留两位小数
			//   formatted = num.toFixed(2);
			// }

			// 处理小数最后一位是0的情况
			// 如果包含小数点，则检查并移除末尾的0和可能的小数点
			// if (formatted.includes(".")) {
			//   formatted = formatted.replace(/0+$/, "").replace(/\.$/, "");
			// }

			return formatted;
		},
		getValueLength(value) {
			// 处理null和undefined
			if (value === null || value === undefined) {
				return 0;
			}

			// 处理字符串和数组（直接使用length属性）
			if (typeof value === 'string' || Array.isArray(value)) {
				return value.length;
			}

			// 处理对象（返回可枚举自有属性的数量）
			if (Object.prototype.toString.call(value) === '[object Object]') {
				return Object.keys(value).length;
			}

			// 处理其他类型（数字、布尔值、函数等无长度概念的类型）
			return 0;
		},
		formatPriceSize(o_num, o_fontSize, type = 1) {
			let fontSize = o_fontSize;
			const len = this.formatPriceNumber(o_num).length;
			//首页拼团立省价格
			if (len > 7 && type == 1) {
				fontSize -= 4;
			}
			//分享图立省价格
			if (len > 7 && type == 2) {
				fontSize -= 3;
			}
			//分享图拼团价格
			if (type === 3) {
				if (len > 4) {
					fontSize -= 10;
				}
				if (len > 5) {
					fontSize -= 4;
				}
				if (len > 6) {
					fontSize -= 6;
				}
				if (len > 7) {
					fontSize -= 6;
				}
			}
			//分享图原价
			if (type === 4) {
				if (len > 5) {
					fontSize -= 2;
				}
				if (len > 6) {
					fontSize -= 2;
				}
			}

			//首页商家
			if (type === 5) {
				if (len > 6) {
					fontSize -= 6;
				}
				if (len > 7) {
					fontSize -= 4;
				}
				if (len > 8) {
					fontSize -= 4;
				}
			}

			return fontSize;
		},
		//px转rpx
		pxToRpx(px, screenWidth) {

			if (typeof px !== 'number') {
				throw new Error('请传入数字类型的px值');
			}
			return px * (750 / screenWidth);
		},
		//获取rpx值的statusBarHeight
		getRpxStatusBarHeight() {
			let statusBarHeight = this.$store.state.systemInfo.statusBarHeight
			let screenWidth = this.$store.state.systemInfo.screenWidth
			return this.pxToRpx(statusBarHeight, screenWidth)
		},

		//消息数量跟新
		messageUpudateNum() {
			if (uni.getStorageSync('accessToken')) {
				request.post("/sj/push/messageUnreadNum").then(res => {
					if (res.code == 200) {
						this.$store.commit("setMessageNum", res.data.count)
					}
				})
			}

		},
		//消息列表跳转阅读
		messageRead(id) {
			request.post("/sj/push/messageRead", {
				id: id
			}).then(res => {
				console.log("messageRead:", res)
				this.messageUpudateNum()
			})
		},

		/**
		 * 获取图片路径（通过条件编译区分环境：仅App缓存，非App直接返回网络URL）
		 * @param {string | string[]} urls - 单个图片URL或URL数组
		 * @returns {Promise<string | string[]>} - 单个URL返回字符串，数组返回对应路径数组
		 */
		async getImagePath(urls) {

			// ======================
			// 条件编译：非App环境（小程序/H5/快应用等）
			// #ifndef APP-PLUS
			console.log('【编译期判断】当前非App环境，直接返回网络图片路径');
			// 格式化返回值：过滤空值，保持入参格式（数组/字符串）
			if (Array.isArray(urls)) {
				return urls.filter(url => typeof url === 'string' && url.trim());
			}
			return typeof urls === 'string' && urls.trim() ? urls.trim() : '';
			// #endif

			// ======================
			// 条件编译：仅App环境（5+App）
			// #ifdef APP-PLUS
			// 参数校验
			if (!urls) {
				console.error('getImagePath：请传入有效的URL（字符串/数组）');
				return Array.isArray(urls) ? [] : '';
			}


			// 统一转为数组处理
			const isBatch = Array.isArray(urls);
			const urlList = isBatch ?
				urls.filter(url => typeof url === 'string' && url.trim()) : [urls.trim()];

			if (urlList.length === 0) {
				return isBatch ? [] : '';
			}

			// 遍历处理每个URL（优先读缓存，无缓存则下载）
			const resultList = [];
			for (const url of urlList) {
				try {
					// 生成唯一缓存Key
					const cacheKey = this._getImageCacheKey(url);
					// 读取本地缓存
					const cachedPath = uni.getStorageSync(cacheKey);

					if (cachedPath) {
						resultList.push(cachedPath);
						continue;
					}

					// 无缓存则下载并保存
					await this._downloadAndCacheImage(url);
					// 再次读取缓存（兜底：防止保存失败）
					const newCachedPath = uni.getStorageSync(cacheKey);
					resultList.push(newCachedPath || url);
				} catch (error) {
					console.warn(`图片${url}缓存失败，使用网络路径：`, error.message);
					resultList.push(url);
				}
			}
			// 按入参格式返回（数组/字符串）
			return isBatch ? resultList : resultList[0];
			// #endif
		},

		// ======================
		// 以下方法仅App环境编译，非App环境会被剔除
		// #ifdef APP-PLUS
		/**
		 * 内部方法：下载图片并缓存到本地（仅App环境）
		 * @param {string} url - 图片URL
		 * @returns {Promise<void>}
		 */
		async _downloadAndCacheImage(url) {
			// 下载文件
			const downloadRes = await new Promise((resolve, reject) => {
				uni.downloadFile({
					url,
					success: resolve,
					fail: (err) => reject(new Error(`下载失败：${err.errMsg}`))
				});
			});

			// 校验下载状态
			if (downloadRes.statusCode !== 200) {
				throw new Error(`下载状态异常：状态码${downloadRes.statusCode}`);
			}

			// 保存到本地
			const saveRes = await new Promise((resolve, reject) => {
				uni.saveFile({
					tempFilePath: downloadRes.tempFilePath,
					success: resolve,
					fail: (err) => reject(new Error(`保存失败：${err.errMsg}`))
				});
			});

			// 存储缓存Key与本地路径的映射
			const cacheKey = this._getImageCacheKey(url);
			uni.setStorageSync(cacheKey, saveRes.savedFilePath);
		},

		/**
		 * 内部方法：生成URL对应的唯一缓存Key（仅App环境）
		 * @param {string} url - 图片URL
		 * @returns {string}
		 */
		_getImageCacheKey(url) {
			// App环境优先用原生MD5，稳定性更高
			if (plus.runtime.MD5) {
				return `img_cache_${plus.runtime.MD5(url)}`;
			}
			// 兜底：URL编码作为Key
			return `img_cache_${encodeURIComponent(url).replace(/[^\w]/g, '_')}`;
		},
		// #endif


	},
};