<template>
	<view class="mg-lr-24">
		<view class="white-bg-wrap mg-top-22">
			<common-title :msg="'已选商品'"></common-title>

			<view class="title u-f u-f-jcfs u-f-aic mg-bot-20 mg-top-18" @click="jumpToShopDetail">
				<text class="fs24 fw400 light-black mg-right-10">{{shopSureBillInfo.storeName}}</text>
				<image src="../.././static/common/big_gray_right_arrow.png" :mode="'widthFix'"
					style="width: 13rpx;height: 26rpx"></image>
			</view>

			<view class="u-f u-f-jcfs u-f-aic mg-bot-20">
				<image :src="shopSureBillInfo.goodsImage" style="width: 128rpx;height: 128rpx;flex: 1"
					:mode="'widthFix'" class="mg-right-10"></image>
				<view class="u-f u-f-fdc" style="flex: 4">
					<view class="fs28 light-black fw400 mg-bot-10">{{shopSureBillInfo.goodsName}}</view>
					<view class="mg-bot-10 u-f u-f-aic u-f-jcfs">
						<text class="light-gray fs24 mg-right-8">{{shopSureBillInfo.goodsSpecification}}</text>
					</view>
					<view class="u-f u-f-aic u-f-jcsb">
						<view class="u-f u-f-jcsb u-f-aic" style="margin-right: 96rpx;">
							<text class="fs32 main-color fw700">{{shopSureBillInfo.unitPrice}}</text>
						</view>
						<view class="fs24 light-gray">x1</view>
					</view>
				</view>
			</view>
		</view>

		<view class="white-bg-wrap mg-bot-20">
			<view class="u-f u-f-jcsb u-f-aic border-bot" style="padding-bottom: 20rpx;" @click="jumpToShopDetail">
				<view class="fs28 light-gray">
					门店名称 {{shopSureBillInfo.storeName}}
				</view>
				<view class="u-f u-f-jcfe u-f-aic" style="text-align: right;">
					<view style="width: 56rpx;height:56rpx;padding-right:10rpx">
						<image :mode="'widthFix'" src="../.././static/common/shop-icon.png"
							style="width: 60%;height:60%;"></image>
					</view>
				</view>
			</view>
			<view class="u-f u-f-jcsb u-f-aic border-bot" style="padding: 20rpx 0">
				<view class="fs28 light-gray">
					营业时间 {{shopSureBillInfo.openingHours}}-{{shopSureBillInfo.closingHours}}
				</view>
				<view class="u-f u-f-jcfe" @click.stop="markPhone(shopSureBillInfo)">
					<image :mode="'widthFix'" src="../.././static/common/phoneImg.png"
						style="width: 56rpx;height:56rpx;"></image>
				</view>
			</view>
			<view class="u-f u-f-jcsb u-f-aic" style="padding-top: 20rpx;" @click="openCity(shopSureBillInfo)">
				<view class="one-line-ellipsis">
					<text class="fs28 light-black fw400">{{shopSureBillInfo.distance}}km | </text>
					<text class="fs28 fw400 light-gray">{{shopSureBillInfo.detailedAddress}}</text>
				</view>
				<view>
					<image :mode="'widthFix'" src="../.././static/common/send.png" style="width: 56rpx;height:56rpx;">
					</image>
				</view>
			</view>
		</view>


		<view class="white-bg-wrap mg-top-20" style="padding-top: 16rpx;">
			<view class="u-f u-f-aic u-f-jcsb light-black fs28 fw400 mg-bot-40">
				<text>现价</text>
				<text>￥{{shopSureBillInfo.orderAmount}}</text>
			</view>
			<view class="u-f u-f-jcsb light-black fs28 fw400 mg-bot-42">
				<view>优惠券</view>
				<view v-if="shopSureBillInfo.couponList.length>0" class="u-f u-f-jcfs u-f-aic"
					@click="handleShowGoodQuan">
					<text class="mg-right-6">{{youhuiquan.couponName}}</text>
					<text
						class="main-color mg-right-10">{{ youhuiquan.discountMethod == 1 ? '￥' : '' }}{{youhuiquan.discountResult}}</text>
					<image src="../.././static/common/sg_right_arrow.png" class="small-gray-right-arrow"
						:mode="'widthFix'" />
				</view>
				<view v-else class="u-f u-f-jcfs u-f-aic">
					<text class="mg-right-6">暂无可用优惠</text>
					<image src="../.././static/common/sg_right_arrow.png" class="small-gray-right-arrow"
						:mode="'widthFix'" />
				</view>
			</view>
			<view class="u-f u-f-jcfe u-f-aic fs24">
				<view class="light-black mg-right-10">已优惠</view>
				<view class="main-color mg-right-20">￥{{youhuiInfo.discountAmount ? youhuiInfo.discountAmount : 0}}
				</view>
				<view class="light-black">合计</view>
				<view class="mg-right-6">
					<text class="fs24">￥</text>
					<text class="fw700 fs32">{{youhuiInfo.discountedAmount}}</text>
				</view>
			</view>
		</view>

		<view class="white-bg-wrap mg-top-20 u-f u-f-jcsb u-f-aic" @click="enterMyGarage">
			<view class="u-f u-f-fdc mg-right-64" style="flex: 3">
				<view class="u-f u-f-jcsb">
					<view class="u-f u-f-jcfs u-f-aic">
						<image :src="carInfo.brandLogo" style="width: 56rpx;height: 56rpx;" :mode="'widthFix'"
							class="mg-right-10"></image>
						<text class="fw400 fs30 light-black">{{carInfo.vehicleBrand}}{{carInfo.vehicleModel}}</text>
					</view>
					<view class="u-f u-f-aifs u-f-jcfs">
						<text
							:class="[carInfo.carType == 1 ? 'blue-province' : 'green-province']">{{carInfo.plateNo?carInfo.plateNo[0]:''}}</text>
						<text
							:class="[carInfo.carType == 1 ? 'blue-car-num' : 'green-car-num']">{{carInfo.plateNo?carInfo.plateNo.slice(1):''}}</text>
					</view>
				</view>
				<view class="fs24 light-gray mg-top-14">{{carInfo.vehicleConfig}}</view>
			</view>
			<view class="u-f u-f-jcfs u-f-aic">
				<image src="../.././static/common/sg_right_arrow.png" class="small-gray-right-arrow"
					:mode="'widthFix'" />
			</view>
		</view>

		<view v-if="shopSureBillInfo.isReservation!=2" class="mg-top-30">
			<view class="mg-bot-20">
				<common-title :msg="'预约'"></common-title>
			</view>

			<view class="mg-bot-20 white-bg-wrap u-f u-f-jcsb u-f-aic" @click="showSelectTimeModal">
				<view class="fs28 light-black">到店预约</view>
				<view class="u-f u-f-aic u-f-jcfs">
					<text class="fs26 light-gray mg-right-10">{{reservationTime}}</text>
					<image src="../.././static/common/sg_right_arrow.png" class="small-gray-right-arrow"
						:mode="'widthFix'" />
				</view>
			</view>
		</view>

		<view class="mg-top-30">
			<common-title :msg="'备注'"></common-title>
		</view>

		<view class="mg-top-20 white-bg-wrap">
			<textarea placeholder-style="color:#999999;font-size: 26rpx;" v-model="remark" placeholder="请输入..."
				auto-height />
		</view>

		<view class="mg-top-20 white-bg-wrap u-f u-f-jcsb u-f-aic fs28 light-black">
			<view>支付方式</view>
			<view class="u-f u-f-jcfs" style="margin-top: 40rpx;margin-bottom: 40rpx;">
				<text class="wx-apply mg-right-6"></text>
				<text>{{shopSureBillInfo.trading ? '微信支付' : '-'}}</text>
			</view>
		</view>

		<view class="fix-bot">
			<view class="content u-f u-f-jcsb u-f-aic">
				<view class="fs24 light-gray fw400">
					<text class="fs24 light-black mg-right-6">总优惠</text>
					<view class="main-color fs24">
						<text>￥</text>
						<text>{{youhuiInfo.discountAmount ? youhuiInfo.discountAmount : 0}}</text>
					</view>
				</view>
				<view>
					<view class="u-f u-f-aic u-f-fdc">
						<view class="u-f u-f-aic u-f-jcfs">
							<text class="fs24 light-black mg-right-6">合计</text>
							<view class="main-color">
								<text class="fs24">￥</text>
								<text class="fs32">{{youhuiInfo.discountedAmount}}</text>
							</view>
						</view>
					</view>
				</view>
				<view class="line-gradient-btn" @click="$debounce(handlePay)">
					立即支付
				</view>
			</view>
		</view>

		<uni-popup :position="'bottom'" class="updatePopup" :show="show" @click="handleHideGoodQuan">
			<view class="share-modal">
				<image class="gray-close" src="../.././static/common/gray_close.png" :mode="'widthFix'"
					@click="handleHideGoodQuan"></image>
				<view class="u-f u-f-aic u-f-jcc one-line-ellipsis mg-bot-32">
					<slot name="share-modal-title">商品券</slot>
				</view>

				<view class="mg-bot-32">
					<scroll-view scroll-y="true" style="height: 400rpx;">
						<view class="u-f u-f-jcfs u-f-aifs mg-bot-20" v-for="item in shopSureBillInfo.couponList"
							:key="item.id">
							<view class="mg-right-10" style="flex: 1">
								<image style="width: 156rpx;height:156rpx" :src="item.couponIcon"></image>
							</view>
							<view style="flex: 3">
								<view class="u-f u-f-jcsb u-f-aic">
									<view class="u-f u-f-fdc" @click="goDetail('/pagesF/coupon-detail/coupon-detail')">
										<text class="fs28 light-black mg-bot-24">{{item.couponName}}</text>
										<text class="fs24 light-gray mg-bot-30">仅用于商城指定产品</text>
										<view class="u-f u-f-jcfs u-f-aifs">
											<text class="fs24 light-gray mg-right-12">所需等级</text>
											<text class="fs26 deep-gray">{{item.userType}}</text>
										</view>
									</view>
									<view class="u-f u-f-aic" @click="selectYouHuiQuan(item)">
										<text class="small-gradient-btn">去使用</text>
									</view>
								</view>
								<view class="light-gray fs24 mg-top-10" style="text-align: right;">
									{{item.deadline}}(含)前使用
								</view>
							</view>
						</view>
					</scroll-view>
				</view>
			</view>
		</uni-popup>

		<uni-popup :position="'bottom'" class="updatePopup" :show="showSelectTime" @hidePopup="hideSelectTimeModal">
			<view class="tire-modal">
				<image class="gray-close" src="../.././static/common/gray_close.png" :mode="'widthFix'"
					@click="hideSelectTimeModal"></image>
				<view class="u-f u-f-aic u-f-jcc mg-bot-24">
					<text class="fs32 fw600 light-blac">到店预约</text>
				</view>
				<view>
					<view class="mg-bot-20 u-f u-f-jcfs">
						<common-title :msg="'2024年8月'"></common-title>
					</view>
					<view class="cards mg-bot-36 u-f u-f-jcfs u-f-aic u-f-fwnw">
						<view @click="selectDate(item, index)" :class="['list-card', active == index ? 'active' : '']"
							v-for="(item, index) in selectTimeInfo" :key="index">
							<text class="mg-bot-10">{{item.week}}</text>
							<text>{{item.date}}</text>
						</view>
					</view>
					<view class="mg-bot-20 u-f u-f-jcfs">
						<common-title :msg="'到店时间'"></common-title>
					</view>
					<view class="cards mg-bot-36 u-f u-f-jcfs u-f-aic u-f-fww">
						<view v-for="(innerItem, idx) in selectTimeInfo[active].appointmentPeriodList" :key="idx"
							:class="['list-card2 u-f u-f-fdc', active2 === idx ? 'selected-card' : '', innerItem.status === 3 ? 'disabled-card' : '']"
							@click="selectTimeSlot(innerItem, idx)">
							<text class="mg-bot-10">{{innerItem.timeSlot}}</text>
							<text>{{innerItem.status === 2 ? '可预约' : '已过期'}}</text>
						</view>
					</view>

					<view class="u-f u-f-jcc u-f-aic" style="width: 100%;">
						<text style="width: calc(100% - 48rpx);text-align: center;" class="line-gradient-btn"
							@click="confirmSelectTime">确认</text>
					</view>
				</view>
			</view>
		</uni-popup>
	</view>
</template>

<script>
	import commonTitle from "../.././components/common-title/common-title.vue"
	import uniPopup from "../../components/uni-popup/uni-popup.vue"
	export default {
		components: {
			commonTitle,
			uniPopup
		},
		data() {
			return {
				id: 0,
				show: false,
				shopSureBillInfo: {},
				youhuiquan: {},
				youhuiInfo: {},
				billId: 0,
				storeId: 0,
				orderId: 0,
				carInfo: '',
				showSelectTime: false,
				selectTimeInfo: '',
				active: 0,
				active2: 0,
				date: '',
				timeSlot: '',
				reservationTime: '预约服务时间'
			}
		},
		onLoad(option) {
			this.billId = option.id
			this.orderId = option.orderId
			this.storeId = option.storeId
			this.shoppCartOrderDetails()
			this.getCarInfo()
			this.getPeriod()
		},
		onShow() {
			this.getCarInfo()
		},
		methods: {
			async getPeriod() {
				let res = await this.$http.get('/api/client/order/appointmentPeriod')

				let selectTimeInfo = res.data.data
				this.selectTimeInfo = selectTimeInfo || {}
				this.date = selectTimeInfo[this.active] || ''
				this.timeSlot = selectTimeInfo[this.active].appointmentPeriodList[this.acitve2] || ''
			},
			async getCarInfo() {
				let res = await this.$http.get('/api/client/index/carInfo')
				let carInfo = res.data.data
				if (carInfo && carInfo.id) {
					uni.setStorageSync('cartId', this.carInfo.id)
				}
				this.carInfo = carInfo || {}
			},
			async shoppCartOrderDetails() {
				let res = await this.$http.get('/api/client/order/shoppCartOrderDetails?key=' + this.billId)
				let resData = res.data.data
				this.shopSureBillInfo = resData || {}
				this.youhuiquan = this.shopSureBillInfo.couponList.length > 0 ?
					this.shopSureBillInfo.couponList[0] : {}
				this.discountedAmount()
			},
			async discountedAmount() {
				let data = {
					goodsNum: this.shopSureBillInfo.goodsNum,
					goodsId: this.shopSureBillInfo.goodsId,
					specificationsId: this.shopSureBillInfo.goodsSpecificationId
				}

				if (this.youhuiquan && this.youhuiquan.id) {
					data = Object.assign(data, {
						couponId: this.youhuiquan.id
					})
				}

				let res = await this.$http.post('/api/client/order/discountedAmount', data)
				let resData = res.data.data
				this.youhuiInfo = resData || {}
			},
			async placeOrder() {
				// 下单
				let data = {
					"storeId": this.shopSureBillInfo.storeId,
					"type": 1,
					"userCarId": this.carInfo.id,
					"goodsId": this.shopSureBillInfo.goodsId,
					"specificationsId": this.shopSureBillInfo.goodsSpecificationId,
					"goodsNum": this.shopSureBillInfo.goodsNum
				}

				if (this.remark) {
					data = Object.assign(data, {
						remark: this.remark
					})
				}

				if (this.reservationTime !== '预约服务时间') {
					data = Object.assign(data, {
						reservationTime: this.reservationTime
					})
				}

				if (this.youhuiquan && this.youhuiquan.id) {
					data = Object.assign(data, {
						couponId: this.youhuiquan.id
					})
				}

				uni.showLoading({
					title: '正在下单...',
					mask: true
				})

				let res = await this.$http.post('/api/client/order/placeOrder', data)

				uni.hideLoading()

				if (res.data.code === 200) {
					this.orderId = res.data.data
					// 支付
					this.payMoney()
				} else {
					uni.showToast({
						title: '下单失败',
						icon: 'none'
					})
				}
			},
			async payMoney() {
				let data = {
					"orderId": this.orderId,
				}

				let res = await this.$http.get('/api/client/lkl/pay', data)
				let resData = res.data.data

				this.wakeWxPay(resData)
			},
			wakeWxPay(resData) {
				var app_id = resData.resp_data.acc_resp_fields.app_id
				var nonce_str = resData.resp_data.acc_resp_fields.nonce_str
				var package_word = resData.resp_data.acc_resp_fields['package']
				var partner_id = resData.resp_data.acc_resp_fields.partner_id
				var prepay_id = resData.resp_data.acc_resp_fields.prepay_id
				var time_stamp = resData.resp_data.acc_resp_fields.time_stamp
				var pay_sign = resData.resp_data.acc_resp_fields.pay_sign
				var sign_type = resData.resp_data.acc_resp_fields.sign_type

				var orderInfo = {
					appid: app_id, // 微信开放平台 - 应用 - AppId，注意和微信小程序、公众号 AppId 可能不一致
					nonceStr: nonce_str, // 随机字符串
					package: package_word, // 固定值
					partnerid: partner_id, // 微信支付商户号
					prepayid: prepay_id, // 统一下单订单号
					timeStamp: time_stamp, // 时间戳（单位：秒）
					signType: sign_type,
					paySign: pay_sign // 签名，这里用的 MD5/RSA 签名
				}

				uni.requestPayment({
					provider: "wxpay",
					appid: app_id, // 微信开放平台 - 应用 - AppId，注意和微信小程序、公众号 AppId 可能不一致
					nonceStr: nonce_str, // 随机字符串
					package: package_word, // 固定值
					partnerid: partner_id, // 微信支付商户号
					prepayid: prepay_id, // 统一下单订单号
					timeStamp: time_stamp, // 时间戳（单位：秒）
					signType: sign_type,
					paySign: pay_sign, // 签名，这里用的 MD5/RSA 签名
					success(res) {
						console.log("success", res)
						uni.redirectTo({
							url: "/pagesE/pay-success/pay-success"
						})
					},
					fail(e) {
						console.log("fail", e)
					}
				})
			},
			handlePay() {
				this.placeOrder()
			},
			enterMyGarage() {
				uni.navigateTo({
					url: "/pagesA/my-garage/my-garage"
				})
			},
			handleShowGoodQuan() {
				console.log("handleShowGoodQuan")
				this.show = true
			},
			handleHideGoodQuan() {
				this.show = false
			},
			selectYouHuiQuan(item) {
				this.handleHideGoodQuan()
				this.youhuiquan = item
				this.discountedAmount()
			},
			openCity(data) {
				uni.openLocation({
					// 
					latitude: Number(this.User.curcity.lat),
					longitude: Number(this.User.curcity.lon),
					name: data.storeName,
					address: data.detailedAddress,
					success: function(res) {
						console.log('打开系统位置地图成功')
					},
					fail: function(error) {
						console.log(error)
					}
				})
			},
			jumpToShopDetail() {
				this.User.navigate({
					url: '/pagesC/shop-detail/shop-detail?id=' + this.storeId
				})
			},
			markPhone(data) {
				uni.makePhoneCall({
					phoneNumber: data.personChargePhone
				})
			},
			hideSelectTimeModal() {
				this.showSelectTime = false
			},
			showSelectTimeModal() {
				console.log("showSelectTimeModal")
				this.showSelectTime = true
			},
			selectDate(item, index) {
				this.active = index
				this.date = item
				this.timeSlot = item.appointmentPeriodList[0]
				this.active2 = 0
			},
			selectTimeSlot(innerItem, idx) {
				this.timeSlot = innerItem
				this.active2 = idx
			},
			confirmSelectTime() {
				if (this.timeSlot.status === 3) {
					uni.showToast({
						title: `您选择的时间段${this.date.date} ${this.timeSlot.timeSlot}已过期，请重新选择`,
						icon: 'none'
					})
				} else {
					this.hideSelectTimeModal()
					this.reservationTime = this.date.date + ' ' + this.timeSlot.timeSlot
				}
			}
		}
	}
</script>

<style>
	page {
		background-color: #F9F9F9;
	}
</style>

<style lang="scss" scoped>
	.gray-right-arrow {
		width: 16rpx;
		height: 16rpx;
		// background: url(../.././static/right-arrow.png) no-repeat center center;
		background-size: 100%;
	}

	.province {
		padding: 12rpx 20rpx;
		color: #ffffff;
		background-color: #20CF55;
		border-radius: 8rpx 0rpx 0rpx 8rpx;
		border: 1rpx solid #0087EF;
	}

	.car-num {
		padding: 12rpx 20rpx;
		color: #20CF55;
		background: #E5EEF5;
		border-radius: 0 8rpx 8rpx 0;
		border: 1rpx solid #20CF55;
	}

	.fix-bot {
		width: 100%;
		position: fixed;
		bottom: 0;
		left: 0;
		z-index: 333;

		.content {
			background-color: #ffffff;
			padding: 10rpx 24rpx;
		}
	}

	.line-gradient-btn {
		background: linear-gradient(90deg, #FF4502 0%, #FF8903 100%);
		border-radius: 41rpx 41rpx 41rpx 41rpx;
		text-align: center;
		padding: 22rpx 120rpx;
		color: #ffffff;
	}

	.wx-apply {
		width: 44rpx;
		height: 44rpx;
		// background: url(../.././static/common/wx_apply.png) no-repeat center center;
		background-size: 100%;
	}

	.small-gray-right-arrow {
		width: 16rpx;
		height: 16rpx;
		// background: url(../.././static/common/gray_right_arrow.png) no-repeat center center;
		background-size: 100%;
	}

	.share-modal {
		position: relative;
		padding: 24rpx;

		.gray-close {
			position: absolute;
			right: 28rpx;
			top: 28rpx;
			width: 42rpx;
			height: 42rpx;
		}

		.content-wrap {
			width: 100%;

			.inner {
				padding: 12rpx;
				border-radius: 10rpx;
				background-color: #ffffff;
				border: 10rpx solid #FF4502;
			}
		}
	}

	.send-icon {
		width: 56rpx;
		height: 56rpx;
		background: url(../.././static/common/send.png) no-repeat center center;
		background-size: 100%;
	}

	.shop-icon {
		width: 24rpx;
		height: 24rpx;
		background: url(../.././static/common/shop-icon.png) no-repeat center center;
		background-size: 100%;
	}

	.sys-mes-nofity {
		padding: 0 90rpx;
		padding-bottom: 50rpx;
		position: relative;
		width: 100%;
		background: linear-gradient(180deg, #FFE3D9 0%, #FFFFFF 100%);
		border-radius: 14rpx;

		.top {
			border-radius: 14rpx;
			height: 148rpx;
		}

		.bot {
			margin-top: 72rpx;

			.confirm {
				padding: 10rpx 60rpx;
				border-radius: 30rpx;
				color: #ffffff;
				background-color: #FF4502;
			}
		}
	}

	.updatePopup :deep(.uni-popup-bottom) {
		border-radius: 40rpx 40rpx 0 0;
	}

	.tire-modal {
		position: relative;
		padding: 34rpx 24rpx 24rpx 24rpx;

		.gray-close {
			position: absolute;
			right: 28rpx;
			top: 28rpx;
			width: 42rpx;
			height: 42rpx;
			// background: url(../.././static/common/gray-close.png) no-repeat center center;
			background-size: 100%;
		}
	}

	.cards {
		.list-card {
			padding-top: 30rpx;
			padding-bottom: 30rpx;
			width: calc(100% / 7 - 10rpx);
			background-color: #ffffff;
			border-radius: 8rpx;
			border: 1rpx solid #999999;
			margin-right: 10rpx;
			font-size: 24rpx;

			&:nth-child(7n) {
				margin-right: 0;
			}

			&.active {
				border: 1rpx solid #333333;
			}
		}

		.list-card2 {
			width: calc(100% / 3 - 15rpx);
			padding-top: 17rpx;
			padding-bottom: 17rpx;
			background: #ffffff;
			border-radius: 9rpx;
			border: 1rpx solid #999999;
			margin-right: 10rpx;
			margin-bottom: 17rpx;
			font-size: 24rpx;
			color: #333333;

			&:nth-child(3n) {
				margin-right: 15;
			}

			&.selected-card {
				border-color: #707070;
			}

			&.disabled-card {
				cursor: not-allowed;
				color: #999999;
			}
		}
	}
</style>