import { getGoodsDataApi,getProductDataApi,getPxClassDataApi } from "@/api/product/index";
import { mapGetters, mapActions } from "vuex";
import { copyObject } from "@/utils/util";
export default {
	data() {
		return {
			pageType: "bill", //选择商品页面类别  用于区分不同功能的数据

			suitInfo: [], //成品-商品信息
			suitClassIndex: 0, //成品-当前商品类别下标

			productInfo: [], //商品信息
			pxClassInfo: [], //培训班开单列表
			classIndex: 0, //当前商品类别下标
			py: "", //拼音搜索条件
			type: "", //库存预警时，固定为waring，其他情况不传或者传空
			autoLoad: true, //自动获取商品信息
			isLimit: true //选择数量不能大于库存限制
		};
	},
	onLoad(options) {
		const { pageType } = options;
		if (pageType) {
			this.pageType = pageType;
		}
		if (this.autoLoad) {
			this.initGoodsData();//成品
			this.initData();//组合
			this.initPxClassData();//课程
		}
	},
	onUnload() {},
	computed: {
		...mapGetters(["getSelectInfo"]),
		filterProductInfo() {
			let list = copyObject(this.productInfo);
			if (this.py) {
				let commonList = list.find(ele => {
					//在常用中过滤
					return ele.classId == -2;
				});
				if (commonList) {
					let commonChildList = [];
					if (!this.$util.isEmpty(commonList.child)) {
						commonList.child.forEach(ele => {
							let hasName = ele.itemName && ele.itemName.indexOf(this.py) >= 0;
							let elePy = (ele.py && ele.py.toLocaleUpperCase()) || "";
							let hasPy = elePy.indexOf(this.py.toLocaleUpperCase()) >= 0;
							if (hasName || hasPy) {
								commonChildList.push(ele);
							}
						});
					}
					commonList.child = commonChildList;
					list = [commonList];
				}
			}
			return list;
		},
		/**
			* 搜索、初始化数据
			* */
		suitFilterProductInfo() {
			let list = copyObject(this.suitInfo);
			if (this.py) {
				let commonList = list.find(ele => {
					//在常用中过滤
					return ele.classId == -2;
				});
				if (commonList) {
					let commonChildList = [];
					if (!this.$util.isEmpty(commonList.child)) {
						commonList.child.forEach(ele => {
							let hasName = ele.itemName && ele.itemName.indexOf(this.py) >= 0;
							let elePy = (ele.py && ele.py.toLocaleUpperCase()) || "";
							let hasPy = elePy.indexOf(this.py.toLocaleUpperCase()) >= 0;
							if (hasName || hasPy) {
								commonChildList.push(ele);
							}
						});
					}
					commonList.child = commonChildList;
					list = [commonList];
				}
			}
			return list;
		},
		/**
			* 当前页面选中的商品列表
			*/
		selectList() {
			return this.getSelectInfo[this.pageType] || [];
		},
		scrollClassId() {
			const curClass = this.productInfo[this.classIndex];
			if (curClass) {
				return `class_${curClass.classId}`;
			}

			return "";
		},
		//选择商品总价
		allPrice() {
			let price = 0;

			if (this.selectList) {
				for (const item of this.selectList) {
					const itemInfo = this.getSelectItemById(item.id, item.classId);
					if (
						itemInfo &&
						!this.$util.isEmpty(itemInfo.bigPrice) &&
						!this.$util.isEmpty(itemInfo.smallPrice)
					) {
						price += item.bigCount * Number(itemInfo.bigPrice);
						price += item.smallCount * Number(itemInfo.smallPrice);
					}
				}
			}

			return Math.round(price * 100) / 100;
		},
		//选择商品总数
		allCount() {
			// console.log(444444, this.selectList);
			return this.selectList.length;
		},
		/**
			* 描点-定位分类
			* */
		suitScrollClassId() {
			const curClass = this.suitInfo[this.suitClassIndex];
			if (curClass) {
				return `class_${curClass.classId}`;
			}

			return "";
		},
		/**
			* 多风格-选择商品总价
			* */
		allGoodsPrice() {
			let price = 0;
			if (this.selectList.goodsStyleList) {
				for (const item of this.selectList) {
					if(item.goodsStyle==0){
						price += item.bigCount * Number(item.price);
					}else{
						price += item.bigCount * Number(item.goodsStyleList[item.goodsStyleSelectIndex].price);
					}
				}

			}

			return Math.round(price * 100) / 100;
		},
		/**
			* 多风格-选择商品总数
			* */
		allGoodsCount() {
			let length = 0;
			this.selectList.forEach(element => {
				length += Number(element.bigCount)
			})
			return length;
		},
		/**
			* 当前选中商品列表中是否有没有库存的商品
			*/
		hasNoStock() {
			let has = false;
			if (this.selectList) {
				for (const item of this.selectList) {
					const {
						bigCount,
						smallCount,
						bigNum,
						bigUnit,
						smallNum,
						smallUnit,
						ratio
					} = item;
					const ratioNum = Number(ratio);
					if (
						Number(bigCount) * ratioNum + Number(smallCount) >
						Number(bigNum) * ratioNum + Number(smallNum)
					) {
						has = true;
						break;
					}
				}
			}
			return has;
		}
	},
	methods: {
		...mapActions(["setSelectInfoByType", "resetSelectInfoByType"]),
		/**
			* 请求商品数据
			*/
		async initData(extendInfo) {
			//extendInfo调用时的扩展参数  如  shopId
			try {
				let params = {
					py: this.py,
					type: this.type
				};
				if (extendInfo) {
					params = { ...params, ...extendInfo };
				}
				const { data } = await getProductDataApi(params);
				data.forEach(element => {
					element.child &&
					element.child.forEach(child => {
						child.classId = element.classId;
						child.className = element.className;
					});
				});
				this.productInfo = data;
				this.classIndex = 0;
			} catch (error) {
			} finally {
				uni.hideLoading();
			}
		},
		/**
			* 获取当前选中商品总价
			*/
		getSelectItemPrice(item) {
			let price = 0;
			const { bigCount, smallCount, bigPrice, smallPrice } = item;
			let sum =
				Number(bigCount) * Number(bigPrice) +
				Number(smallCount) * Number(smallPrice);
			price = Math.round(sum * 100) / 100;
			return price;
		},
		/**
			* 成品-请求商品数据
			*/
		async initGoodsData(extendInfo) {
			//extendInfo调用时的扩展参数  如  shopId
			try {
				let params = {
					py: this.py,
					type: this.type
				};
				if (extendInfo) {
					params = { ...params, ...extendInfo };
				}
				const { data } = await getGoodsDataApi(params);
				data.forEach(element => {
					element.child &&
					element.child.forEach(child => {
						child.classId = element.classId;
						child.className = element.className;
					});
				});
				this.suitInfo = data;
				this.suitClassIndex = 0;
			} catch (error) {
			} finally {
				uni.hideLoading();
			}
		},

		/**
			* 获取当前选中商品总价
			*/
		getSelectGoodsPrice(item) {
			let price = 0;

			if(item.goodsStyle==0){
				price = item.bigCount * Number(item.price);
			}else{
				price = item.bigCount * Number(item.goodsStyleList[item.goodsStyleSelectIndex].price);
			}
			// let sum = 0;
			// if()
			// 	Number(bigCount) * Number(bigPrice) +
			// 	Number(smallCount) * Number(smallPrice);
			// price = Math.round(sum * 100) / 100;
			return price;
		},
		/**
			* 通过id获取当前选中的商品信息
			*/
		getSelectItemById(id, classId) {
			let info = {
				bigCount: 0, //扎数
				smallCount: 0, //支数
				autoPrice: 0, //调价价格
				itemPrice: 0 //调价价格
			};
			const item =
				this.selectList &&
				this.selectList.find(ele => {
					return ele.id == id && ele.classId == classId;
				});
			if (item) {
				info = {
					...item,
					bigCount: Number(item.bigCount),
					smallCount: Number(item.smallCount),
					autoPrice: Number(item.autoPrice),
					itemPrice: Number(item.itemPrice),
				};
			}
			return info;
		},
		/**
			* 通过id获取当前选中的商品类别信息  左边菜单角标  当前选中该类别商品多少件
			*/
		getSelectClassById(classId) {
			let info = {
				bigCount: 0, //扎数
				smallCount: 0 //支数
			};

			const productItem =
				this.productInfo &&
				this.productInfo.find(ele => {
					return ele.classId == classId;
				});
			if (productItem && productItem.child) {
				for (const item of productItem.child) {
					for (const selectItem of this.selectList) {
						if (item.id == selectItem.id && item.classId == selectItem.classId) {
							info.bigCount += Number(selectItem.bigCount);
							info.smallCount += Number(selectItem.smallCount);
							info.itemPrice += selectItem.itemPrice?Number(selectItem.itemPrice):'';
						}
					}
				}
			}
			return info;
		},

		/**
			* 添加商品
			*/
		addEvent(item) {
			const list = this.selectList;
			let has = false;
			for (let index = 0; index < list.length; index++) {
				const element = list[index];
				if (element.id == item.id && element.classId == item.classId) {
					has = true;
					if (this.isLimit) {
						if (element.bigCount < item.bigNum) {
							list[index] = { ...element, bigCount: ++element.bigCount };
						}
						//  else if (element.smallCount < item.smallNum) {
						// 	list[index] = { ...element, smallCount: ++element.smallCount };
						// }
					} else {
						list[index] = { ...element, bigCount: ++element.bigCount };
					}

					if (this.isLimit) {
						const { bigCount, smallCount } = list[index];
						//超过库存时 设置为库存最大值
						const ratio = Number(item.ratio);
						if (
							Number(bigCount) * ratio + Number(smallCount) >
							Number(item.bigNum) * ratio + Number(item.smallNum)
						) {
							list[index].bigCount = Number(item.bigNum);
							list[index].smallCount = Number(item.smallNum);
							this.$msg("库存不足");
						}
					}

					break;
				}
			}
			if (!has) {
				let info = { classId: item.classId, id: item.id };

				const classInfo =
					this.productInfo &&
					this.productInfo.find(element => {
						return element.classId == item.classId && element.child;
					});
				if (classInfo) {
					info = classInfo.child.find(ele => {
						return ele.id == item.id;
					});
				}

				let params = {
					...info,
					bigCount: 1, //扎数
					smallCount: 0, //支数
					autoPrice: 0 //调价价格
				};
				if (info.bigNum && info.bigNum > 0) {
					list.push(params);
				} else {
					this.$msg("库存不足");
				}
			}

			this.setSelectInfoByType({ type: this.pageType, info: list });
			// this.$forceUpdate();
		},

		addCustomNumEvent(item,params1,type) {
			const list = this.selectList;

			// if (!has) {}
			let info = { classId: item.classId, id: item.id };

			const classInfo =
				this.productInfo &&
				this.productInfo.find(element => {
					return element.classId == item.classId && element.child;
				});
			if (classInfo) {
				info = classInfo.child.find(ele => {
					return ele.id == item.id;
				});
			}

			let params = {
				...info,
				bigCount: 0, //扎数
				smallCount: 0, //支数
				autoPrice: 0 //调价价格
			};
			list.push(params);
			if(type!='noAdd'){
				this.setSelectInfoByType({ type: this.pageType, info: list });
			}
			this.$nextTick(()=>{
				this.customNum(params1)
			})
			// this.$forceUpdate();
		},
		/**
			* 减去商品
			*/
		delEvent(item) {
			const list = this.selectList;
			let has = false;
			for (let index = 0; index < list.length; index++) {
				const element = list[index];
				if (element.id == item.id && element.classId == item.classId) {
					has = true;

					if (element.bigCount > 0) {
						list[index] = { ...element, bigCount: --element.bigCount };
					} else if (element.smallCount > 0) {
						list[index] = { ...element, smallCount: 0 };
					}

					if (this.isLimit) {
						const { bigCount, smallCount } = list[index];
						//超过库存时 设置为库存最大值
						const ratio = Number(item.ratio);
						if (
							Number(bigCount) * ratio + Number(smallCount) >
							Number(item.bigNum) * ratio + Number(item.smallNum)
						) {
							list[index].bigCount = Number(item.bigNum);
							list[index].smallCount = Number(item.smallNum);
						}
					}
					if (element.bigCount == 0 && element.smallCount == 0) {
						list.splice(index, 1);
					}

					break;
				}
			}
			if (!has) {
				let info = { classId: item.classId, id: item.id };

				const classInfo =
					this.productInfo &&
					this.productInfo.find(element => {
						return element.classId == item.classId && element.child;
					});
				if (classInfo) {
					info = classInfo.child.find(ele => {
						return ele.id == item.id;
					});
				}
				let params = {
					...info,
					bigCount: 1, //扎数
					smallCount: 0, //支数
					autoPrice: 0 //调价价格
				};

				list.push(params);
			}
			this.setSelectInfoByType({ type: this.pageType, info: list });
			// this.$forceUpdate();
		},
		//减去所有商品
		delAllEvent(item) {
			const list = this.selectList;
			for (let index = 0; index < list.length; index++) {
				const element = list[index];
				if (element.id == item.id ) {

					list.splice(index, 1);

					break;
				}
			}
			this.setSelectInfoByType({ type: this.pageType, info: list });
		},
		/**
			* 通过id获取当前选中的商品类别信息  左边菜单角标  当前选中该类别商品多少件
			*/
		getSuitSelectClassById(classId) {
			let info = {
				bigCount: 0, //扎数
				smallCount: 0 //支数
			};

			const productItem =
				this.suitInfo &&
				this.suitInfo.find(ele => {
					return ele.classId == classId;
				});
			if (productItem && productItem.child) {
				for (const item of productItem.child) {
					for (const selectItem of this.selectList) {
						if (item.id == selectItem.id && item.classId == selectItem.classId) {
							info.bigCount += Number(selectItem.bigCount);
							info.smallCount += Number(selectItem.smallCount);
							info.itemPrice += selectItem.itemPrice?Number(selectItem.itemPrice):'';
						}
					}
				}
			}
			return info;
		},

		/**
			* 多风格-添加商品
			*/
		addGoodsEvent(item) {
			const list = this.selectList;
			//过滤空数据
			if(item.bigCount==0||!item.bigCount){return}
			let has = false;
			for (let index = 0; index < list.length; index++) {
				const element = list[index];
				if (element.id == item.id && element.classId == item.classId) {
					has = true;
					list[index] = { ...element, bigCount: item.bigCount,goodsStyleSelectIndex: item.goodsStyleSelectIndex };

					break;
				}
			}
			if (!has) {
				let info = { classId: item.classId, id: item.id };

				const classInfo =
					this.suitInfo &&
					this.suitInfo.find(element => {
						return element.classId == item.classId && element.child;
					});
				if (classInfo) {
					info = classInfo.child.find(ele => {
						return ele.id == item.id;
					});
				}

				let params = {
					...info,
					bigCount: item.bigCount, //扎数
					goodsStyleSelectIndex: item.goodsStyleSelectIndex, //选中的风格
				};
				list.push(params);
			}

			this.setSelectInfoByType({ type: this.pageType, info: list });
			// this.$forceUpdate();
		},
		/**
			* 多风格-添加商品
			*/
		addGoods(item) {
			const list = this.selectList;
			let has = false;
			for (let index = 0; index < list.length; index++) {
				const element = list[index];
				if (element.id == item.id && element.classId == item.classId) {
					has = true;
					list[index] = { ...element, bigCount: ++element.bigCount };
					break;
				}
			}
			if (!has) {
				let info = { classId: item.classId, id: item.id };

				const classInfo =
					this.suitInfo &&
					this.suitInfo.find(element => {
						return element.classId == item.classId && element.child;
					});
				if (classInfo) {
					info = classInfo.child.find(ele => {
						return ele.id == item.id;
					});
				}

				let params = {
					...info,
					bigCount: 1, //扎数
					smallCount: 0, //支数
					autoPrice: 0 //调价价格
				};
				list.push(params);
			}

			this.setSelectInfoByType({ type: this.pageType, info: list });
			// this.$forceUpdate();
		},
		/**
			* 多风格-减去商品
			*/
		delGoodsEvent(item) {
			const list = this.selectList;
			for (let index = 0; index < list.length; index++) {
				const element = list[index];
				if (element.id == item.id && element.classId == item.classId) {

					if (element.bigCount > 0) {
						list[index] = { ...element, bigCount: --element.bigCount };
					}
					if (element.bigCount == 0 || !element.bigCount) {
						list.splice(index, 1);
					}
					break;
				}
			}
			this.setSelectInfoByType({ type: this.pageType, info: list });
		},
		/**
			* 更新商品
			*/
		updateItemEvent(item) {
			const list = this.selectList;
			for (let index = 0; index < list.length; index++) {
				const element = list[index];
				if (element.id == item.id && element.classId == item.classId) {
					const { bigCount, smallCount } = list[index];
					//超过库存时 设置为库存最大值
					const ratio = Number(item.ratio);
					if (this.isLimit) {
						if (
							Number(bigCount) * ratio + Number(smallCount) >
							Number(item.bigNum) * ratio + Number(item.smallNum)
						) {
							list[index].bigCount = Number(item.bigNum);
							list[index].smallCount = Number(item.smallNum);
							list[index].itemPrice = item.itemPrice?Number(item.itemPrice):'';
						}
					}

					list[index] = {
						...element,
						bigCount: Number(item.bigCount),
						smallCount: Number(item.smallCount),
						itemPrice: item.itemPrice?Number(item.itemPrice):''
					};

					break;
				}
			}

			this.setSelectInfoByType({ type: this.pageType, info: list });
			// this.$forceUpdate();
		},
		/**
			* 切换左侧商品类别
			*/
		swichClass(e) {
			let cur = e.currentTarget.dataset.current;
			if (this.classIndex == cur) {
				return false;
			} else {
				this.classIndex = cur;
			}
		},
		/**
			* 多风格-切换左侧商品类别
			*/
		suitSwichClass(e) {
			let cur = e.currentTarget.dataset.current;
			if (this.suitClassIndex == cur) {
				return false;
			} else {
				this.suitClassIndex = cur;
			}
		},
		/**
			* 搜索对应花材
			*/
		searchFn() {},


		/**
			* 请求课程数据
			*/
		async initPxClassData() {
			try {
				const { data } = await getPxClassDataApi({pageSize:50});
				this.pxClassInfo = data.list;
			} catch (error) {
			} finally {
				uni.hideLoading();
			}
		},
	}
};
