import request from '@/util/index.js'
const methods = {
	async getData(obj,isServerPartDetail) { //  获取远程数据
		let _this = this
		/* ts 数据类型声明
			type serverpartRegion = {
				serverpartname:string,
				cashpay: string
			}
			tyepy reginListModel = {
				name:string,
				cashpay:number,
				child: serverpartRegion[]
			}
		*/
		// let regionList = [] // 营收上传列表 reginListModel[]
		this.groupType =  obj.GroupType
		const requestParamas = {
			Statistics_Date: obj.time ,
			Statistics_Month: obj.month ,
			Province_Code: obj.ProvinceCode ,
			pushProvinceCode: obj.ProvinceCode ,
			Serverpart_ID: obj.GroupType != 1020 ? obj.ServerpartIds : '',
			SPRegionType_ID: obj.GroupType == 1020 ? obj.ServerpartIds : '',
			// Revenue_Include: 1
		}
		const requestParamasBudget = {
			Statistics_Date: obj.time ,
			Statistics_Month: obj.month ,
			Province_Code: obj.ProvinceCode ,
			pushProvinceCode: obj.ProvinceCode ,
			Serverpart_ID: obj.ServerpartIds ? obj.ServerpartIds : ''
		}
		this.provinceCode = obj.ProvinceCode
		// 营收数据
		const data = await request.$webGet('CommercialApi/Revenue/GetRevenuePushList', requestParamas)
		if (data.Result_Code != 100) return

		// 在营门店数量统计
		const busniessCounts = await request.$webGet('CommercialApi/BaseInfo/GetShopCountList', requestParamas)
		if (busniessCounts.Result_Code != 100) return

		// 业态关系
		const tradeData = await request.$webGet('CommercialApi/BaseInfo/GetBusinessTradeList', requestParamas)
		if (tradeData.Result_Code != 100) return

		// 计划营收金额
		const budgetAmount = await request.$webGet('CommercialApi/Revenue/GetBudgetExpenseList', requestParamasBudget)
		if (budgetAmount.Result_Code != 100) return

		// 移动支付分账数据
		const mobileShare = await request.$webGet('CommercialApi/Revenue/GetMobileShare', requestParamas)
		if (mobileShare.Result_Code != 100) return

		// 万佳商城配送数据
		const mallDeliver = await request.$webGet('CommercialApi/Revenue/GetMallDeliver', requestParamas)
		if (mallDeliver.Result_Code != 100) return

		// 片区车流量
		const bayonetCount = await request.$webGet('CommercialApi/Revenue/GetSPBayonetList', requestParamas)
		if (bayonetCount.Result_Code != 100) return

		if (isServerPartDetail) { // 是服务区营收推送页面
			return _this.getSeverpartReginList(data.Result_Data.List, busniessCounts.Result_Data.List,
				tradeData.Result_Data.List, budgetAmount.Result_Data.List)
		}
		return _this.getReginList(data.Result_Data.List, busniessCounts.Result_Data.List,
			tradeData.Result_Data.List, budgetAmount.Result_Data.List,
			bayonetCount.Result_Data.List, mobileShare.Result_Data, mallDeliver.Result_Data)
		// [reginList, totalData, busniessTypePie, busniessTradePie]

	},
	getTotalShowData(newData, oldData,index) {
		// <TotalModel>
		/*
		type TotalModel = {
			ticketCount: number // 客单数量 ,
			totalCount: number// 总数量 ,
			totalOffAmount: number// 优惠金额 ,
			mobilePayment: number// 移动支付金额 ,
			cashPay: number// 实收金额 ,
			different_Price_Less: number// 短款金额 ,
			different_Price_More: number// 长款金额 ,
		}
		*/

		if (index>0) {
			oldData.ticketCount +=  newData.TicketCount
			oldData.totalCount +=  newData.TotalCount
			oldData.totalOffAmount +=  newData.TotalOffAmount
			oldData.mobilePayment +=  newData.MobilePayment
			oldData.cashPay +=  newData.CashPay
			oldData.diffLessPrice +=  newData.Different_Price_Less
			oldData.diffMorePrice +=  newData.Different_Price_More
			if(newData.BusinessType==1000){ // 商超

				oldData.scCount =  oldData.scCount ? oldData.scCount + 1 : 1
				oldData.scCashPay = oldData.scCashPay ? oldData.scCashPay + newData.CashPay : newData.CashPay
			}
			if(newData.BusinessType==3000){ // 餐饮
				oldData.cyCount = oldData.cyCount ? oldData.cyCount + 1 : 1
				oldData.cyCashPay  = oldData.cyCashPay ? oldData.cyCashPay + newData.CashPay : newData.CashPay
			}
		} else {
			oldData.ticketCount = newData.TicketCount
			oldData.totalCount = newData.TotalCount
			oldData.totalOffAmount = newData.TotalOffAmount
			oldData.mobilePayment = newData.MobilePayment
			oldData.cashPay = newData.CashPay
			oldData.diffLessPrice = newData.Different_Price_Less
			oldData.diffMorePrice = newData.Different_Price_More

			if(newData.BusinessType==1000){ // 商超

				oldData.scCount = 1
				oldData.scCashPay = newData.CashPay
			}
			if(newData.BusinessType==3000){ // 餐饮

				oldData.cyCount = 1
				oldData.cyCashPay = newData.CashPay
			}

		}
		return {...oldData}
	},
	getBusniessPie(typeName, item, list) { // 经营模式数据

		const oldData = list.find(m => m.name === item[typeName])
		if (oldData) {
			oldData.data = Number((oldData.data+ item.CashPay).toFixed(2))
			oldData.value = Number((oldData.value+ item.CashPay).toFixed(2))
		} else {
			list.push({
				name: item[typeName],
				data: item.CashPay,
				value: item.CashPay,
			})
		}

		return [...list]
	},
	getBayonetPie(typeName, item, list) { // 车流量数据
		const regionData = list.find(n => n.name === item["SPRegionType_Name"])
		if (regionData) {
			const oldData = regionData.spList.find(m => m.name === item[typeName])
			if (oldData) {
				oldData.Vehicle_Count = Number((oldData.Vehicle_Count + item.Vehicle_Count).toFixed(2))
				oldData.SectionFlow_Count = Number((oldData.SectionFlow_Count + item.SectionFlow_Count).toFixed(2))
				oldData.MinVehicle_Count = Number((oldData.MinVehicle_Count + item.MinVehicle_Count).toFixed(2))
				oldData.MediumVehicle_Count = Number((oldData.MediumVehicle_Count + item.MediumVehicle_Count).toFixed(2))
				oldData.LargeVehicle_Count = Number((oldData.LargeVehicle_Count + item.LargeVehicle_Count).toFixed(2))

				const oldRegion = oldData.regionList.find(o => o.name === item["Serverpart_Region"])
				if (oldRegion) {
					oldRegion.Vehicle_Count = Number((oldRegion.Vehicle_Count + item.Vehicle_Count).toFixed(2))
					oldRegion.SectionFlow_Count = Number((oldRegion.SectionFlow_Count + item.SectionFlow_Count).toFixed(2))
					oldRegion.MinVehicle_Count = Number((oldRegion.MinVehicle_Count + item.MinVehicle_Count).toFixed(2))
					oldRegion.MediumVehicle_Count = Number((oldRegion.MediumVehicle_Count + item.MediumVehicle_Count).toFixed(2))
					oldRegion.LargeVehicle_Count = Number((oldRegion.LargeVehicle_Count + item.LargeVehicle_Count).toFixed(2))
				}
				else{
					oldData.regionList.push({
						name: item["Serverpart_Region"],
						Vehicle_Count: item.Vehicle_Count,
						SectionFlow_Count: item.SectionFlow_Count,
						MinVehicle_Count: item.MinVehicle_Count,
						MediumVehicle_Count: item.MediumVehicle_Count,
						LargeVehicle_Count: item.LargeVehicle_Count,
					})
				}
			} else {
				regionData.spList.push({
					name: item[typeName],
					Vehicle_Count: item.Vehicle_Count,
					SectionFlow_Count: item.SectionFlow_Count,
					MinVehicle_Count: item.MinVehicle_Count,
					MediumVehicle_Count: item.MediumVehicle_Count,
					LargeVehicle_Count: item.LargeVehicle_Count,
					regionList: [{
						name: item["Serverpart_Region"],
						Vehicle_Count: item.Vehicle_Count,
						SectionFlow_Count: item.SectionFlow_Count,
						MinVehicle_Count: item.MinVehicle_Count,
						MediumVehicle_Count: item.MediumVehicle_Count,
						LargeVehicle_Count: item.LargeVehicle_Count,
					}]
				})
			}
		} else {
			list.push({
				name: item["SPRegionType_Name"],
				index: item["SPRegionType_Index"],
				spList: [{
					name: item[typeName],
					Vehicle_Count: item.Vehicle_Count,
					SectionFlow_Count: item.SectionFlow_Count,
					MinVehicle_Count: item.MinVehicle_Count,
					MediumVehicle_Count: item.MediumVehicle_Count,
					LargeVehicle_Count: item.LargeVehicle_Count,
					regionList: [{
						name: item["Serverpart_Region"],
						Vehicle_Count: item.Vehicle_Count,
						SectionFlow_Count: item.SectionFlow_Count,
						MinVehicle_Count: item.MinVehicle_Count,
						MediumVehicle_Count: item.MediumVehicle_Count,
						LargeVehicle_Count: item.LargeVehicle_Count,
					}],
				}]
			})
		}

		return [...list]
	},
	getSeverpartReginList(data, shopCountList,tradeList,budgetAmount){
		let _this = this
		let totalShow = {} // 总营收数据统计
		let list = [] // 上传营收列表数据
		let busniessTypePie = [] // 经营模式饼图统计数据
		let busniessTradePie = [] // 经营业态饼图统计数据
		let busniessTradeFathPie = [] // 区域经营饼图统计数据

		data.map(async (n, index) => {
			n.show = false
			totalShow = _this.getTotalShowData(n, totalShow,index); // 总营收数据统计
			// 寻找门店父业态
			let trade =	tradeList.find(t=>t.BUSINESSTRADE_NAME==n.BusinessTrade_Name)
			if(trade && trade.BUSINESSTRADE_PNAME && trade.BUSINESSTRADE_PNAME.indexOf('其他')==-1 ) {
				n.tradename = trade.BUSINESSTRADE_PNAME

			}else{
				n.tradename = '其他'
			}

			busniessTypePie = _this.getBusniessPie('Business_TypeName', n, busniessTypePie)
			busniessTradePie = _this.getBusniessPie('BusinessTrade_Name', n, busniessTradePie)
			busniessTradeFathPie = _this.getBusniessPie('tradename', n, busniessTradeFathPie)
		})
		totalShow.serverpartname = data[0].Serverpart_Name
		totalShow.uploadState = data.length+'/'+ (shopCountList.length ? shopCountList[0].SHOP_BUSINESSCOUNT: 0)
		totalShow.uploadCount =  data.filter(n=>n.Revenue_Upload>0).length
		totalShow.totalUploadCount = shopCountList.length ? shopCountList[0].SHOP_BUSINESSCOUNT: 0
		totalShow.budgetAmount = 0
		if(budgetAmount.length){
			totalShow.budgetAmount = budgetAmount[0].BUDGET_AMOUNT
		}
		return [ totalShow, busniessTypePie, busniessTradePie,busniessTradeFathPie ]
	},
	getReginList(data, shopCountList,tradeList,budgetAmount,bayonetCount, mobileShare, mallDeliver) {

		let _this = this
		let totalShow = {} // 总营收数据统计
		let list = [] // 上传营收列表数据
		let busniessTypePie = [] // 经营模式饼图统计数据
		let busniessTradePie = [] // 经营业态饼图统计数据
		let busniessAreaPie = [] // 区域经营饼图统计数据
		let bayonetPie = [] // 区域车流饼图统计数据
		let totalUploadCount = 0
		data.map(async (n, index) => {
			n.show = false

			// 寻找门店父业态
			let trade =	tradeList.find(t=>t.BUSINESSTRADE_NAME==n.BusinessTrade_Name)
			if(trade && trade.BUSINESSTRADE_PNAME && trade.BUSINESSTRADE_PNAME.indexOf('其他')==-1 ) {
				n.tradename = trade.BUSINESSTRADE_PNAME

			}else{
				n.tradename = _this.provinceCode==340000?  '其他' : (n.BusinessTrade_Name || '其他')
			}
			// 上传营收情况
			let regin = list.find(m => m.name === n.SPRegionType_Name)
			let [reginShopCount, serverpartShopCount] = [0, 0]
			shopCountList.forEach(shop => {
				if (shop.SPREGIONTYPE_NAME == n.SPRegionType_Name) {
					reginShopCount += shop.SHOP_BUSINESSCOUNT
				}
				if (shop.SERVERPART_ID == n.Serverpart_ID) {
					serverpartShopCount = shop.SHOP_BUSINESSCOUNT
				}
			})

			if (!regin) {
				totalUploadCount += reginShopCount
				list.push({
					name: n.SPRegionType_Name, // 区域名称
					cashpay: n.CashPay,
					uploadcount: n.Revenue_Upload>0 ? 1: 0, // 区域上传数量
					totalcount: reginShopCount,
					child: [{
						serverpart_Id: n.Serverpart_ID,
						serverpart_Name: n.Serverpart_Name,
						cashpay: n.CashPay,
						uploadcount: n.Revenue_Upload>0 ? 1: 0,
						totalcount: serverpartShopCount
					}]
				})
			} else {
				regin.cashpay += n.CashPay
				regin.uploadcount += n.Revenue_Upload>0 ? 1: 0
				let serverpart = regin.child.find(m => m.serverpart_Name === n.Serverpart_Name)
				if (serverpart) {
					serverpart.cashpay += n.CashPay
					serverpart.uploadcount += n.Revenue_Upload>0 ? 1: 0

				} else {
					regin.child.push({
						serverpart_Id: n.Serverpart_ID,
						serverpart_Name: n.Serverpart_Name,
						cashpay: n.CashPay,
						uploadcount: n.Revenue_Upload>0 ? 1: 0,
						totalcount: serverpartShopCount
					})
				}

				regin.child.sort((a, b) => b.cashpay - a.cashpay)
			}
			totalShow = _this.getTotalShowData(n, totalShow,index); // 总营收数据统计

			busniessTypePie = _this.getBusniessPie('Business_TypeName', n, busniessTypePie)
			busniessTradePie = _this.getBusniessPie('tradename', n, busniessTradePie)
			if (this.groupType == 1000){
				busniessAreaPie =  _this.getBusniessPie('SPRegionType_Name', n, busniessAreaPie)
			}
		})
		list.sort((a, b) => b.cashpay - a.cashpay)
		if (this.groupType == 1000 && _this.provinceCode == 340000) {
			// 获取移动支付分账数据
			if (mobileShare) {
				totalShow.shareShopCount = mobileShare.ShareShop_Count
				totalShow.royaltyPrice = mobileShare.Royalty_Price
				totalShow.subRoyaltyPrice = mobileShare.SubRoyalty_Price
				totalShow.ticketFee = mobileShare.Ticket_Fee
			}
			// 获取移动支付分账数据
			if (mallDeliver) {
				totalShow.deliverBillCount = mallDeliver.DeliverBill_Count
				totalShow.deliverPrice = mallDeliver.Deliver_Price
				totalShow.deliverRate = mallDeliver.Deliver_Rate
			}
			// 片区车流量数据
			bayonetCount.map(async (n, index) => {
				bayonetPie = _this.getBayonetPie('Serverpart_Name', n, bayonetPie)
			})
		}

		totalShow.uploadState = data.filter(n=>n.Revenue_Upload>0).length+'/'+totalUploadCount
		totalShow.budgetAmount = 0
		if(_this.provinceCode==620000){
			const ele = list.find(n=>n.name=="通美公司")
			totalShow.tmCrashPay = ele ? ele.cashpay :'0.00'
		}
		if(budgetAmount.length){
			totalShow.budgetAmount = budgetAmount[0].BUDGET_AMOUNT
		}
		console.log('list',list)
		return [list, totalShow, busniessTypePie, busniessTradePie,busniessAreaPie,bayonetPie]
	}
}

export default methods ;

