<template>
	<view class="footer-mall-pay-box">
		<view v-if="false" class="mall-left-box" @click="detailBtn">
			<!-- 需要换成从接口中取得 wgy -->
			<view class="price-icon-box">
				<text class="red-price fh-text">￥</text>
				<text class="red-price">{{totalPrice}}</text>明细
				<icon :class="mxjtClass"></icon>
			</view>
			<view>购买即同意虚拟产品不支持退订</view>
		</view>
		<!-- 微信 -->
		<view class="pay-status-box" v-if="payType =='weixin'&&currentPlatform =='android'" @click="switchPayWay">
			<icon class="wx-icon"></icon>微信
		</view>
		<view class="pay-status-box" v-if="payType =='zhifubao'&&currentPlatform =='android'" @click="switchPayWay">
			<icon class="zfb-icon"></icon>支付宝
		</view>
		<view class="pay-status-box apple-status-box" v-if="currentPlatform =='ios'">
			<icon class="apple-icon"></icon>
		</view>
		<slot></slot>
	</view>
</template>

<script setup>
	import {
		reactive,
		computed,
		onMounted,
		nextTick,
		ref
	} from "vue";
	import {
		getMallist
	} from "@/api/productMall.js";
	import {
		orderAdd,
		orderPayAli,
		orderPayWx,
		orderPayApple,
		orderCheck
	} from "@/api/order.js"
	import {
		onLoad
	} from "@dcloudio/uni-app";
	import {
		toast,
		debounce,
		getUserIdentity
	} from "@/utils/common";
	import cacheManager from '@/utils/cacheManager.js';
	const showPayWay = ref(true)
	let currentPlatform = ref('android')
	const payType = ref('weixin');
	let orderId = ref('');
	let productId = ref(null)
	let iapChannel = ref(null)
	let quantity = ref(1)
	let channel = ref('')
	let appleFlag = ref('')



	// const props = defineProps({
	// 	list: { // 父组件传入的初始选中商品列表
	// 		type: Array,
	// 		default: () => []
	// 	}
	// });
	onMounted(() => {
		//console.log('props',props.list);
		//isIOSorAndroid()
	})
	//	$emit('return-btn');
	const $emit = defineEmits(['return-btn'])

	function switchPayWay() {
		payType.value = payType.value == 'weixin' ? 'zhifubao' : 'weixin'
	}
	const isIOSorAndroid = () => {
		const systemInfo = uni.getSystemInfoSync();

		console.log('systemInfo', systemInfo);

		if (systemInfo.platform == 'ios') {

			return currentPlatform.value = 'ios'
		} else {
			return currentPlatform.value = 'android'
		}

	}

	function genggaiVip(data) {
		uni.hideLoading();
		const localList = cacheManager.get('auth').levelIdList || []
		const mergeList = [...new Set([...localList, ...data.levelIdList])]
		cacheManager.updateObject('auth', {
			levelIdList: mergeList
		})
		toast("chenggong!!!! 之后跳转我的订单页面")

		// if (formPage.value == 'my') {
		// 	uni.redirectTo({
		// 		url: '/pages/my/index'
		// 	})
		// } else {
		// 	uni.redirectTo({
		// 		url: '/pages/study/index'
		// 	})
		// }
	}

	const creatOrderIos = debounce((cardIds => {

		uni.showLoading({
			title: '',
			mask: true
		});
		// if (appleFlag.value.toString() == 'true') {
		// 	productId.value = 'llisoftEzhuangyuanceshi'
		// } else {
		// 	if (cardId.value == 1) {
		// 		productId.value = 'llisoftEzhuangyuan'
		// 	} else {
		// 		productId.value = 'llisoftEzhuangyuanYingyu'
		// 	}
		// }
		let req = {
			cardIds: cardIds
		}
		orderAdd(req).then(res => {
			console.log('res', res);
			if (res.code == 0) {
				uni.hideLoading();
				orderId.value = res.data.id
				// 测试ios 1元
				applePay()
			} else {
				uni.hideLoading();

				return false
				console.log('请求失败');
			}
		}).catch((e) => {
			uni.hideLoading();

			toast("订单创建失败")
			return false

		})


	}), 500)

	function applePaySuccess(data) {
		uni.showLoading({
			title: '会员开通中',
			mask: true
		});
		let req = {
			"id": orderId.value,
			"paynum": data.transactionIdentifier,
			"receipt": data.transactionReceipt
		}
		console.log('reqreq', req);
		orderPayApple(req).then(res => {
			if (res.code == 0 && res.data) {
				iapChannel.finishTransaction(data.transactionIdentifier)
				console.log('resiapChanneliapChanneliapChannel', res);
				genggaiVip()
			} else {

				iapChannel.finishTransaction(data.transactionIdentifier)
				uni.hideLoading();
				toast("苹果内购失败")
				console.log('orderPayApple失败');
				return false
			}
		})
	}

	function applePay() {
		console.log('123123');
		if (!productId.value) {
			uni.showToast({
				title: '苹果内购ID缺失，请选择其它支付方式或联系客服',
				icon: "none"
			});
			return false;
		}
		uni.showLoading({
			title: '正在支付中...'
		});
		try {
			plus.payment.getChannels(function(channels) { //判读项目支付通道开通情况
					for (var i in channels) {
						iapChannel = channels[i];
						// 获取 id 为 'appleiap' 的 channel  
						console.info("支付通道", iapChannel)
						if (iapChannel.id === 'appleiap') { //开通了app应用内支付，在manifest.josn中设置，开通后需打自定议基座
							console.info("苹果支付通道", iapChannel)
							// ids 数组中的项为 App Store Connect 配置的内购买项目产品ID（productId）
							var ids = [productId.value];
							// iap 为应用内支付对象 
							iapChannel.requestOrder(ids, function(e) {
									// 获取订单信息成功回调方法  
									console.log('requestOrder success: ' + JSON.stringify(e));
									uni.requestPayment({
										provider: 'appleiap',
										orderInfo: {
											productid: productId.value, //产品id,来自于苹果
											quantity: quantity.value, //产品数量
											manualFinishTransaction: true
										},
										success: (e) => {
											uni.hideLoading();

											//	toast("苹果内购成功")
											console.info("苹果内购成功", e)
											applePaySuccess(e)
											//e.payment.orderNo = that.orderNo
											//支付成功回调，前端调用后台接口
										},
										fail: (e) => {
											uni.hideLoading();
											toast("苹果内购失败")
											console.info("苹果内购失败", e)
										},
									})
								},
								function(e) {
									// 获取订单信息失败回调方法  
									console.log('requestOrder failed: ' + JSON.stringify(e));
								});
						} else {
							console.log('不支持苹果支付')
						}
					}
				},
				function(e) {
					console.log("获取iap支付通道失败：" + e.message);
				});

		} catch (e) {
			uni.showModal({
				title: "init",
				content: e.message,
				showCancel: false
			});
		} finally {
			uni.hideLoading();
		}



	}


	function wxPay() {
		orderPayWx({
			id: orderId.value
		}).then(res2 => {
			uni.hideLoading();
			console.log('res2', res2);
			uni.requestPayment({
				"provider": "wxpay",
				"orderInfo": {
					"appid": res2.data.appid, // 应用ID（AppID）
					"partnerid": res2.data.partnerId, // 商户号（PartnerID）
					"prepayid": res2.data.prepayId, // 预支付交易会话ID
					"package": res2.data.packageVal, // 固定值
					"noncestr": res2.data.nonceStr, // 随机字符串
					"timestamp": res2.data.timestamp, // 时间戳（单位：秒）
					"sign": res2.data.sign // 签名，这里用的 MD5 签名
				}, //此处为服务器返回的订单信息字符串
				success: function(res) {

					//var rawdata = JSON.parse(res.rawdata);
					//	console.log('res',res);	
					//	console.log('支付成功');
					//	console.log('rawdata', rawdata);
					uni.showLoading({
						title: '会员开通中,请稍后...'
					});
					orderCheck({
						id: orderId.value
					}).then(res3 => {
						console.log('res3', res3);
						if (res3.code == 0) {

							genggaiVip(res3.data)
						} else {
							setTimeout(() => {
								orderCheck({
									id: orderId.value
								}).then(res4 => {
									if (res4.code == 0) {
										genggaiVip(res4.data)
									} else {
										toast(
											"开通失败,请联系管理员！"
										)
										uni
											.hideLoading();
										return false
									}
								}).catch(() => {
									uni.hideLoading();
									toast("check接口报错")
									return false
								})
							}, 5000)
						}
					}).catch(() => {
						uni.hideLoading();
						toast("check接口报错")
						return false
					})

				},
				fail: function(err) {
					uni.hideLoading();
					//  toast('支付失败:' + JSON.stringify(err));
					console.log('支付失败:' + JSON.stringify(err));
				}
			});
		}).catch((error) => {
			uni.hideLoading();

			console.log(error);
		})
	}

	function aliApy() {
		orderPayAli({
			id: orderId.value
		}).then(res2 => {
			console.log('res2', res2);
			uni.hideLoading();
			uni.requestPayment({
				"provider": "alipay",
				"orderInfo": res2.data.text, //此处为服务器返回的订单信息字符串
				success: function(res) {
					// var rawdata = JSON.parse(res.rawdata);
					// console.log('支付成功');
					// console.log('rawdata', rawdata);

					uni.showLoading({
						title: '会员开通中,请稍后...'
					});
					orderCheck({
						id: orderId.value
					}).then(res3 => {
						if (res3.code == 0) {
							genggaiVip(res3.data)
						} else {
							setTimeout(() => {
								orderCheck({
									id: orderId.value
								}).then(res4 => {
									if (res4.code ==
										0) {
										genggaiVip(res4.data)
									} else {
										toast(
											"开通失败,请联系管理员！"
										)
										uni
											.hideLoading();
										return false
									}
								}).catch(() => {
									uni.hideLoading();
									toast("check接口报错")
									return false
								})
							}, 5000)
						}
					}).catch(() => {
						uni.hideLoading();
						toast("check接口报错")
						return false
					})
				},
				fail: function(err) {
					console.log('支付失败:' + JSON.stringify(err));
					uni.hideLoading();
				}
			});
		})
	}

	const creatOrder = debounce((cardIds) => {


		console.log('cardIds', cardIds);
		return
		uni.showLoading({
			title: '',
			mask: true
		});
		if (payType.value == 'weixin') {
			console.log('创建订单11');
			let req = {
				cardIds: cardIds
			}
			orderAdd(req).then(res => {
				console.log('res', res);
				console.log(' res.data.id', res.data.id);
				orderId.value = res.data.id
				wxPay()
			}).catch((err) => {
				uni.hideLoading();
				toast("订单创建失败")
				return false
			})

		} else {

			let req = {
				cardIds: cardIds
			}
			orderAdd(req).then(res => {
				console.log('res', res);
				orderId.value = res.data.id
				aliApy()
			}).catch((err) => {
				uni.hideLoading();
				toast("订单创建失败")
				return false
			})

		}

	}, 500)

	onLoad((options) => {

		//	isIOSorAndroid()


	})
	function getData(data) {
		creatOrder()
	  console.log('data', data);
	}
	defineExpose({
	  getData // 必须明确暴露方法
	});
	
</script>

<style>

</style>