import {
	defineStore
} from 'pinia';
import {
	ref,
	computed,
	reactive,
	watchEffect
} from 'vue';

export const useCartStore = defineStore('cart',
	() => {
		// const dinersNum = uni.cache.get('dinersNum')
		// const isVip = uni.cache.get('orderVIP').isVip //此用户是否是会员
		// const isMemberPrice = uni.cache.get('ordershopUserInfo').isMemberPrice //此店是否可以用会员
		// const isTableFee = uni.cache.get('ordershopUserInfo').isTableFee //此店是否免桌位费
		// const tableFee = uni.cache.get('ordershopUserInfo').tableFee //一个餐位费多钱

		//商品数据Map
		const goodsMap = reactive({})

		function setGoodsMap(product_id, data) {
			goodsMap[product_id] = data;
		}


		//购物车数据
		const carts = ref([])
		//购物车是否为空
		const isEmpty = computed(() => {
			return !carts.value || carts.value.length <= 0
		})
		// 计算向上取整
		const roundUpToTwoDecimals = (num, i) => {
			// 先将数字乘以 100 并转换为字符串保留足够的小数位
			let temp = (num * 100).toFixed(10);
			// 向上取整
			let rounded = null
			if (i == 'upward') {
				rounded = Math.ceil(parseFloat(temp));
			} else {
				rounded = Math.floor(parseFloat(temp));
			}
			// 再除以 100 得到保留两位小数的结果
			return rounded / 100;
		};

		// 精确计算函数
		const preciseCalculation = (num1, num2) => {
			// 将数字转换为整数，乘以 100 以保留两位小数
			const int1 = BigInt(Math.round(num1 * 100));
			const int2 = BigInt(Math.round(num2 * 100));
			// 执行乘法运算
			const result = int1 * int2;
			// 再除以 10000 以还原为原来的小数
			return Number(result) / 10000;
		};

		// 计算购物车商品总价格
		const getTotalTotalPrices = (matchedProducts, changeFreeenable = true) => computed(() => {
			if (!matchedProducts || !Array.isArray(matchedProducts)) {
				return 0;
			}
			// console.log(uni.cache.get('orderVIP').isVip, uni.cache.get('ordershopUserInfo').isMemberPrice,
			// 	111)
			// 购物车总数价格
			let cart = matchedProducts.reduce((total, item) => {
				// 是否启用会员价 0否1是
				if (uni.cache.get('orderVIP').isVip == 1 && uni.cache.get('ordershopUserInfo')
					.isMemberPrice == 1 && changeFreeenable) {
					// memberPrice会员价
					return total + (parseFloat(item.memberPrice || item.price) * parseFloat(item
						.num - item
						.returnNum));
				} else {
					// salePrice销售价
					return total + (parseFloat(item.price) * parseFloat(item.num - item.returnNum));
				}
			}, 0);

			cart = cart.toFixed(2)
			console.log(parseFloat(cart))
			// 向上取整并保留两位小数
			// let result = roundUpToTwoDecimals(cart, 'upward')
			return parseFloat(cart);
		});

		// 计算商品卷所选择的总价格
		const getTotalProductroll = (matchedProducts) => computed(() => {
			if (!matchedProducts || !Array.isArray(matchedProducts)) {
				return 0;
			}
			// 购物车总数价格
			let cart = matchedProducts.reduce((total, item) => {
				// 是否启用会员价 0否1是
				if (uni.cache.get('orderVIP').isVip == 1 && uni.cache.get('ordershopUserInfo')
					.isMemberPrice == 1) {
					// memberPrice会员价
					return total + parseFloat(item.memberPrice || item.price)
				} else {
					// salePrice销售价
					return total + parseFloat(item.price)
				}
			}, 0);
			// 向上取整并保留两位小数
			let result = roundUpToTwoDecimals(cart, 'upward')
			return result;
		});

		// 桌位置
		const getTotalSeatcharge = (seatNum) => computed(() => {
			// 是否免除桌位费 0 否 1 是
			let cart = 0

			if (uni.cache.get('ordershopUserInfo').isTableFee == 0 && seatNum) {
				cart = parseFloat(seatNum) * parseFloat(uni.cache.get('ordershopUserInfo').tableFee)

				// Math.ceil(parseFloat(seatNum) * parseFloat(
				// uni.cache.get('ordershopUserInfo').tableFee) * 100) / 100;
			}
			// 向下取整并保留两位小数
			let result = roundUpToTwoDecimals(cart, 'downward')
			return result;
		});

		// 计算购物车总打包费用（向下取整并保留两位小数）
		const getTotalPackFee = (cartList) => computed(() => {
			const total = cartList.reduce((sum, item) => {
				return sum + (parseFloat(item.packAmount) * (parseFloat(item.packNumber) || (
					parseFloat(item.num) - parseFloat(item.returnNum))));
			}, 0);
			// 向下取整并保留两位小数
			let result = roundUpToTwoDecimals(total, 'downward')
			console.log(result)
			return result;
			// return Math.floor(total * 100) / 100;
		});

		//获取热门商品
		async function getHotProduct() {

		}

		//获取分组商品
		async function getGroupProduct() {

		}
		return {
			getTotalPackFee,
			getTotalSeatcharge,
			getTotalTotalPrices,
			getTotalProductroll,
			carts,
			isEmpty,
			setGoodsMap
		};
	}, {
		unistorage: true, // 开启后对 state 的数据读写都将持久化
	},
);