<template>
	<view class="min-page bg-f7 color-333 u-font-28 relative">
		<view class="top" :style="topStyle">
			<up-navbar bg-color="transparent" :fixed="false" :placeholder="false" :title="title" left-icon-color="#fff"
				@leftClick="back('/groupBuying/index/index')" title-color="#fff"></up-navbar>
			<view class="u-flex info u-col-center">
			</view>
		</view>
		<view class="bottom">
			<view class="time" v-if="item.status=='待成团'||item.wareGroupStatus=='ing'">
				<text class="color-666">剩余成团时间：</text>
				<view class="u-font-32">
					<text class="number">{{returnNum(0)}}</text>
					<text class="gap">：</text>
					<text class="number">{{returnNum(1)}}</text>
					<text class="gap">：</text>
					<text class="number">{{returnNum(2)}}</text>
				</view>
			</view>
			<view class="goods u-flex u-col-center">
				<up-image width="158rpx" height="158rpx" radius="14rpx" :src="item.goodsImg"></up-image>
				<view class=" u-flex-1 u-p-l-16">
					<view class="u-flex u-col-center u-row-between">
						<view class="u-flex tuan-members">
							<image :src="imgs.pin" class="pin" mode=""></image>
							<text class="">{{item.groupPeopleNum}}人团</text>
						</view>
						<template v-if="item.id">
							<statusVue :status="item.status"></statusVue>
						</template>
						<template v-else>
							<statusVue v-if="item.wareGroupStatus=='ing'" status="待成团"></statusVue>
							<view v-else></view>
						</template>

					</view>
					<view class="u-m-t-16 u-flex u-col-center">
						<view style="width: 356rpx;">
							<view class="font-bold u-line-1" v-if="item&&item.wareJson">{{item.wareJson
.wareName}}</view>
							<view class="u-flex u-m-t-10 u-col-center ">
								<view class="price">
									<text class="u-font-30">¥</text>
									<text class="u-font-48 font-bold">{{item.wareGroupPrice}} </text>
								</view>
								<view class="old-price u-m-l-32">
									<text>¥</text>
									<text>{{item.wareOriginalPrice}} </text>
								</view>
							</view>
						</view>
						<view class="u-p-l-16 color-333 no-wrap" v-if="item.id">
							数量：{{item.num}}
						</view>
					</view>
				</view>
			</view>

			<view class="refund" v-if="item.status=='退款中'">已申请退款，需等待商家审核</view>
			<view class="shop-box">
				<view class="u-flex u-row-center u-flex-col u-col-center" v-if="item.status=='待核销'||item.status=='退款中'">
					<up-qrcode :val="item.verifyCode" :size="104"></up-qrcode>
					<view class="u-flex u-m-t-22 u-m-b-18 u-col-center">
						<text>{{item.verifyCode}}</text>
						<image @click="copyText(item.verifyCode)" class="copy" src="/groupBuying/static/image/copy.png">
						</image>
					</view>
				</view>

				<view class="shop ">
					<view class="u-flex">
						<text style="min-width: 180rpx;" class="color-666">可核销门店：</text>
						<text>{{item.shopName}}</text>
					</view>
					<view class="u-m-t-32 u-flex">
						<text style="min-width: 180rpx;" class="color-666">门店地址：</text>
						<text>{{item.shopAddress}}</text>
					</view>
				</view>
			</view>

			<view class="members" v-if="item.status!='已退款'&&item.status!='已核销'">
				<view class="list" v-if="item.users&&item.users.length">
					<view class="item" v-for="(user,index) in item.users" :key="index">
						<view class="box">
							<view class="u-flex  relative">
								<up-avatar size="140rpx" :src="user.userAvatar"></up-avatar>
								<view class="u-flex u-row-center absolute">
									<text class="tuanzhang" v-if="index==0">团长</text>
								</view>

							</view>
							<view class="u-line-1 u-m-t-16 color-000 text-center">{{user.userName}}</view>
						</view>

					</view>

					<view class="item" v-if="item.status=='待成团'">
						<view class="box">
							<view class="u-flex  relative">
								<view class="add-box u-flex u-row-center">
									<up-icon color="#D9D9D9" name="plus"></up-icon>
									<button open-type="share" class="share" @click="share(item)">分享</button>
								</view>
							</view>
							<view class="u-line-1 u-m-t-16 color-000 text-center">等待参团</view>
						</view>
					</view>
				</view>
				<view class="u-flex u-row-center" v-if="item.wareGroupStatus=='ing'&&!item.id">
					<view class="pin-btn" @click="fastBuy">立即参与拼团</view>
				</view>
			</view>
			<template v-if="item.id">
				<view class="order">
					<view class="u-flex u-row-between">
						<view class="font-bold u-font-32">订单信息</view>

						<view class="u-flex color-666" @click="showOrder=!showOrder" style="align-items: baseline;">
							<text class="u-m-r-18">{{showOrder?'收起':'展开'}}</text>
							<view class="guodu" :class="{rotate:!showOrder}">
								<up-icon name="arrow-down" bold></up-icon>
							</view>
						</view>
					</view>
					<view class="u-m-t-16" v-if="showOrder">
						<view class="u-flex u-row-between item">
							<view class="color-666">商品总额</view>
							<view class="">¥{{item.payAmount}}</view>
						</view>
						<view class="u-flex u-row-between item">
							<view class="color-666">实付金额</view>
							<view class="">¥{{item.payAmount}}</view>
						</view>
						<view class="u-flex u-row-between item">
							<view class="color-666">订单号</view>
							<view class="">{{item.orderNo}}</view>
						</view>
						<view class="u-flex u-row-between item">
							<view class="color-666">支付时间</view>
							<view class="">{{item.payTime}}</view>
						</view>
						<view class="u-flex u-row-between item"
							v-if="item.groupEndTime&&item.wareGroupStatus=='success'">
							<view class="color-666">成团时间</view>
							<view class="">{{item.groupEndTime}}</view>
						</view>
						<view class="u-flex u-row-between item" v-if="item.verifyTime">
							<view class="color-666">核销时间</view>
							<view class="">{{item.verifyTime}}</view>
						</view>
					</view>

				</view>
			</template>

		</view>
		<view style="height: 100px;"></view>
		<view class="btns" v-if="item.id">
			<template v-if="item.status=='待成团'">
				<view class="btn" @click="refund(item)" v-if="canRefund(item)">申请退款</view>
				<button open-type="share" class="btn main" @click="share(item)">邀请好友</button>
			</template>
			<template v-if="item.status=='待核销'">
				<view class="btn" @click="refund(item)" v-if="canRefund(item)">申请退款</view>
			</template>
			<template v-if="item.status=='退款中'">
				<view class="btn" @click="cancelRefund(item)">取消退款</view>
			</template>
		</view>




		<!-- 需要支付的弹窗 -->
		<up-popup :show="popupData.show" mode="bottom" closeOnClickOverlay @close="popupData.show = false">
			<view class="popup-content">
				<view class="popup-content-top u-flex u-row-right">
					<up-icon name="close" bold="" @click="popupData.show = false"></up-icon>
				</view>
				<view class="goods-info" v-if="item&&item.wareJson">
					<view class="u-flex">
						<image class="cover" :src="item.goodsImg"></image>
						<view class="u-flex u-flex-1 u-row-between u-p-l-16 u-col-center">
							<view style="max-width: 340rpx;">
								<view class="u-font-32 font-bold u-line-1" v-if="item && item.wareJson">
									{{item.wareJson.wareName}}</view>

								<view class="u-m-t-12 color-666 u-line-2">{{item.wareJson.wareDetail}}</view>
							</view>
							<view>
								<view class="price">¥{{item.wareGroupPrice}}</view>
								<view class="old-price">¥{{item.wareOriginalPrice}}</view>
								<view class="limitBuyNum" v-if="item.wareJson.limitBuyNum">
									限购{{item.wareJson.limitBuyNum}} </view>
							</view>
						</view>
					</view>

				</view>

				<view class="popup-content-bottom   u-flex u-row-between u-col-center">
					<view class="u-flex u-col-baseline">
						<text class="color-666">合计：</text>
						<text class=" price">{{totalPrice}}</text>
					</view>
					<view class="u-flex">
						<up-icon name="minus-circle" size="20" color="#666" @click="changeNumber('-')"></up-icon>
						<text class="u-m-l-20 u-m-r-20">{{number}}</text>
						<up-icon name="plus-circle-fill" size="20" color="#ED5A2E" @click="changeNumber('+')"></up-icon>
					</view>

				</view>

				<view class="u-m-t-42 u-flex u-row-center">
					<view class="btn" @click="payExchange">去支付</view>
				</view>
			</view>
		</up-popup>
		<!-- 兑换确认弹窗end -->

	</view>
</template>

<script setup>
	import {
		Storelogin
	} from '@/stores/user.js';
	const storelogin = Storelogin();
	import {
		back
	} from '@/utils/uniapp.js'
	import statusVue from '@/groupBuying/components/status.vue'
	import * as Api from '@/common/api/order/gbOrder.js'
	import {
		wxShare
	} from '@/utils/share.js'
	import {
		computed,
		reactive
	} from 'vue'
	import {
		getRemainingHMS
	} from '@/utils/countdown.js'

	const imgs = {
		bg: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/1/d21f2dfd7bec44618f2d5e4b88372b08.png',
		pin: 'https://cashier-oss.oss-cn-beijing.aliyuncs.com/upload/2/3947892924dd481782331513aff00eb3.png'
	}
	const popupData = reactive({
		show: false,
		item: null
	});

	const number = ref(1)

	import {
		BigNumber
	} from "bignumber.js";
	const totalPrice = computed(() => {
		if (!item.wareGroupPrice) {
			return 0;
		}
		return BigNumber(number.value).times(item.wareGroupPrice).toNumber()
	})

	function changeNumber(step) {
		if (step === '-') {
			if (number.value == 1) {
				return
			}
			number.value--
			return
		}
		if (step === '+') {
			if (item.wareJson.limitBuyNum == -10086) {
				number.value++
				return
			}
			if (number.value >= item.wareJson.limitBuyNum) {
				return uni.showToast({
					title: '最多可购买' + item.wareJson.limitBuyNum + '份',
					icon: 'none'
				})
			}
			number.value++
			return
		}
	}

	function fastBuy() {
		popupData.show = true
	}

	async function payExchange() {
		uni.setStorageSync('group_buying_order', {
			...item,
			...item.wareJson,
			number: number.value,
			id: item.wareId || '',
			originalPrice: item.wareOriginalPrice,
			groupPrice: item.wareGroupPrice,
			wareImgs: item.wareJson.wareImgs.join(','),
			groupOrderNo: item.groupOrderNo || '',
		})
		uni.navigateTo({
			url: '/groupBuying/confirm-order/confirm-order'
		})

	}



	const canRefundStatus = ['待成团', '待核销']

	function canRefund(item) {
		if (canRefundStatus.includes(item.status)) {
			return true
		}
		return false
	}

	const topStyle = {
		backgroundImage: 'url(' + imgs.bg + ')'
	}
	const showOrder = ref(true)

	function copyText(text) {
		uni.setClipboardData({
			data: text,
			success() {}
		})
	}
	const query = reactive({
		shopId: '',
		detailId: '',
	})

	async function init(opt) {
		// 获取小程序进入场景和参数
		const launchOptions = uni.getLaunchOptionsSync();
		console.log(launchOptions);
		// 获取链接上的参数
		const launchOptionsQuery = launchOptions.query;
		console.log('launchOptionsQuery', launchOptionsQuery);
		Object.assign(query, launchOptionsQuery)
		console.log(opt)
		Object.assign(query, opt)
		console.log(query)
		if(query.shopId){
			uni.cache.set('shopId', query.shopId)
		}
		await storelogin.actionslogin()
		getDetail()
	}
	const item = reactive({})

	function getDetail() {
		Api.recordDetail(query).then(res => {
			console.log('getDetail',res)
			const wareJson = JSON.parse(res.wareJson)
			wareJson.wareImgs = wareJson.wareImgs.split(',').filter(v => v)
			res.wareJson = wareJson;
			res.goodsImg = wareJson.wareImgs[0];
			Object.assign(item, res)
			console.log('item', item)
			uni.cache.set('shopId', item.shopId)
			if (!item.id && item.wareGroupStatus != 'ing') {
				uni.showModal({
					title: '提示',
					content: '拼团已结束',
					showCancel: false,
					success() {
						uni.redirectTo({
							url: '/groupBuying/index/index',
						})
					}
				})
				return
			}
		})
	}
	onLoad(init)

	let timer = null
	let nowTime = ref(Date.now())
	timer = setInterval(() => {
		nowTime.value = Date.now()
	}, 1000)

	const returnTime = computed(() => {
		nowTime.value
		return getRemainingHMS(item)
	})

	function returnNum(index) {
		return returnTime.value.split(':')[index]
	}


	function refund(item) {
		uni.showModal({
			title: '提示',
			content: '是否申请退款？',
			showCancel: true,
			success(res) {
				if (res.confirm) {
					Api.applyRefund({
						recordId: item.id,
						orderNo: item.orderNo,
					}).then(res => {
						if (res) {
							uni.showToast({
								title: '申请成功'
							})
							setTimeout(() => {
								getDetail()
							}, 1000)
						}
					})
				}
			}
		})
	}

	function cancelRefund(item) {
		uni.showModal({
			title: '提示',
			content: '是否取消退款？',
			showCancel: true,
			success(res) {
				if (res.confirm) {
					Api.cancelRefund({
						recordId: item.id,
						orderNo: item.orderNo,
					}).then(res => {
						if (res) {
							uni.showToast({
								title: '取消成功'
							})
							setTimeout(() => {
								getDetail()
							}, 1000)
						}
					})
				}
			}
		})
	}

	let shareItem = null

	function share(item) {
		shareItem = item
	}
	onShareAppMessage(() => {
		console.log('onShareAppMessage')
		console.log(shareItem)
		const query = `groupOrderNo=${shareItem.groupOrderNo}&shopId=${shareItem.shopId}`
		return wxShare({
			title: shareItem.wareJson.wareName,
			imageUrl: shareItem.goodsImg,
			path: '/groupBuying/detail/index' + '?' + query,
			query,
		})
	})
	
	const title=computed(()=>{
		if(!item.id&&item.wareGroupStatus=='ing'){
			return '拼团特惠'
		}
		return '订单详情'
	})
</script>

<style lang="scss" scoped>
	.top {
		height: 422rpx;
		background-size: cover;

		.info {
			padding: 32rpx 30rpx 0 30rpx;
			color: #fff;
			font-size: 32rpx;
			font-weight: 700;
		}


	}

	.bottom {
		margin: 0 28rpx;
		transform: translateY(-160rpx);
		border-radius: 16rpx;
		overflow: hidden;

		.time {
			padding: 18rpx 24rpx;
			background: #FFF4E2;
			display: flex;
			align-items: center;
			border-radius: 16rpx 16rpx 0 0;

			.number {
				padding: 6rpx;
				border-radius: 16rpx;
				background: #ED5A2E;
				color: #fff;
				font-size: 32rpx;
				margin-left: 18rpx;
				margin-right: 18rpx;
			}

			.gap {
				font-size: 32rpx;
			}
		}

		.goods {
			background-color: #fff;
			padding: 22rpx 24rpx;

			.pin {
				width: 60rpx;
				height: 38rpx;
			}

			.tuan-members {
				padding: 0 16rpx 0 0;
				border-radius: 0 6rpx 6rpx 0;
				background: #4C2828;
				color: #f5d9ad;
				font-weight: 700;
			}

			.price {
				color: #ed5a2e;
			}

			.old-price {
				color: #666666;
				text-decoration: line-through;
			}
		}

		.u-font-48 {
			font-size: 48rpx;
		}

		.shop-box {
			background: #fff;
			padding: 32rpx 30rpx 28rpx 30rpx;
			border-radius: 0 0 16rpx 16rpx;
		}

		.copy {
			width: 22rpx;
			height: 22rpx;
			margin-left: 22rpx;
		}

		.shop {
			border-radius: 8rpx;
			background: #F8F8F8;
			padding: 16rpx 34rpx;
		}

		.relative {
			position: relative;
		}

		.members {
			padding: 26rpx 24rpx;
			border-radius: 16rpx;
			margin-top: 32rpx;
			background-color: #fff;

			.list {
				display: flex;
				flex-wrap: wrap;
			}

			.item {
				width: calc(100% / 3);
				display: flex;
				margin-bottom: 32rpx;

				.add-box {
					width: 140rpx;
					height: 140rpx;
					border: 2rpx dashed #D9D9D9;
					border-radius: 50%;
					overflow: hidden;
					position: relative;

					.share {
						position: absolute;
						left: 0;
						right: 0;
						top: 0;
						bottom: 0;
						opacity: 0;
					}
				}

				&:nth-of-type(3n-1) {
					justify-content: center;
				}

				&:nth-of-type(3n) {
					justify-content: flex-end;
				}

				.box {
					display: flex;
					flex-direction: column;
				}

				.absolute {
					bottom: 0;
					display: flex;
					justify-content: center;
					left: 0;
					right: 0;
				}

				.tuanzhang {
					padding: 8rpx 18rpx;
					border-radius: 20rpx;
					background: #ED5A2E;
					color: #fff;
					bottom: 0;
				}
			}
		}

		.order {
			padding: 32rpx 28rpx;
			border-radius: 16rpx;
			margin-top: 32rpx;
			background-color: #fff;

			.item {
				padding: 16rpx 0;
			}
		}
	}

	.btns {
		position: fixed;
		left: 87rpx;
		right: 87rpx;
		bottom: 0;
		padding-bottom: 60rpx;
		display: flex;
		gap: 40rpx;

		.btn {
			flex: 1;
			padding: 16rpx 28rpx;
			border-radius: 200rpx;
			text-align: center;
			font-size: 32rpx;
			line-height: 1;
			margin: 0;
			justify-content: center;
			border: 2rpx solid #E8AD7B;
			background: #FFF;
			color: #E8AD7B;

			&.main {
				background-color: #E8AD7B;
				color: #fff;
			}
		}
	}

	.guodu {
		transition: all .3s;
	}

	.pin-btn {
		padding: 14rpx 60rpx;
		border-radius: 200rpx;
		text-align: center;
		font-size: 32rpx;
		justify-content: center;
		border: 2rpx solid #E8AD7B;
		background: #E8AD7B;
		color: #fff;
		margin-top: 32rpx;
	}

	.rotate {
		transform: rotate(-90deg);
	}

	.refund {
		padding: 18rpx 164rpx;
		border-radius: 0 0 16rpx 16rpx;
		background: #FFF4E2;
		font-weight: 700;
		margin-bottom: 32rpx;
	}

	.popup-content {
		font-size: 28rpx;
		min-height: 300px;

		.popup-content-top {
			padding: 32rpx 28rpx;
			border-bottom: 1px solid #ededed;
		}

		.goods-info {
			padding: 32rpx 28rpx;
			border-bottom: 1px solid #ededed;

			.cover {
				width: 184rpx;
				height: 184rpx;
				border-radius: 16rpx;
				background: #d9d9d9;

				&.bg-fff {
					background-color: #fff;
				}
			}

			.price {
				font-size: 32rpx;
				font-weight: 700;
				color: #ed5a2e;
				line-height: 46rpx;
			}

			.old-price {
				font-size: 32rpx;
				color: #999;
				text-decoration-line: line-through;
				line-height: 48rpx;
			}

			.limitBuyNum {
				color: #666;
				line-height: 42rpx;
			}

		}

		.popup-content-bottom {
			padding: 20rpx;
			border-bottom: 1px solid #ededed;

			.price {
				color: #ed5a2e;
				font-size: 32rpx;
				font-weight: 700;
			}
		}

		.btn {
			display: flex;
			padding: 22rpx 214rpx;
			align-items: flex-start;
			gap: 20rpx;
			border-radius: 66rpx;
			background: #e8ad7b;
			font-size: 32rpx;
			color: #fff;
			font-size: 700;
		}
	}
</style>