<template>
	<view class="selectCar-box">
		<view class="details">
			<view class="title"> 基础信息 </view>
			<view class="details-item">
				<view> 订单编号： </view>
				<text>{{ orderInfos.orderId }}</text>
			</view>
			<view class="details-item">
				<view> 用户名称： </view>
				<text>{{ orderInfos.ownerName }}</text>
			</view>
			<view class="details-item">
				<view> 用户证件类型： </view>
				<text>{{ getCodeName('CERTIFICATE_TYPE',orderInfos.ownerIdtype) }}</text>
			</view>
			<view class="details-item">
				<view> 用户证件号： </view>
				<text>{{ orderInfos.ownerIdnum }}</text>
			</view>
			<view class="details-item">
				<view> 订单车牌号： </view>
				<text style="color: #00b38b">{{ orderInfos.vehiclePlate }}</text>
			</view>
			<view class="details-item">
				<view> 车牌颜色： </view>
				<text style="color: #00b38b">{{
		  orderInfos.vehiclePlateColorStr
		}}</text>
			</view>
			<view class="details-item">
				<view> 收费车型： </view>
				<text>{{ orderInfos.vehicleType }}</text>
			</view>
		</view>
		<view class="title"> 卡信息 </view>
		<view class="card">
			<view class="card-left">
				<image :src="`${$imgUrl}card2.png`" mode=""></image>
				<view class="card-center">
					<view class="card-center-head"> {{orderInfos.cardId}} </view>
					<view class="tips">
						<!-- <text>储蓄卡</text> -->
						<text class="tips-card">{{getCodeName('CARD_STATE_TYPE',orderInfos.cardStatus)}}</text>
					</view>
					<view class="choose-item1"> 有效期：{{orderInfos.cardExpireTime }}</view>
				</view>
			</view>
			<view class="choose-item" @click="choose(1)">
				<view class="active" v-if="flag.includes(1)">

				</view>
			</view>
		</view>
		<view class="title"> OBU设备信息 </view>
		<view class="card">
			<view class="card-left">
				<image :src="`${$imgUrl}card1.png`" mode=""></image>
				<view class="card-center">
					<view class="card-center-head"> {{orderInfos.obuId}} </view>
					<view class="tips">
						<text class="tips-card">{{getCodeName('OBU_STATE_TYPE',orderInfos.obuStatus)}}</text>
					</view>
					<view class="choose-item1"> 有效期：{{orderInfos.obuExpireTime }} </view>
				</view>
			</view>
			<view class="choose-item" @click="choose(2)">
				<view class="active" v-if="flag.includes(2)">

				</view>
			</view>
		</view>

		<button class="submit" @click="toPage" v-if="!state.flag">卡签续期</button>
		<button class="submit" @click="toBack" v-else="state.flag">返回服务中心</button>
		<view class="mask" v-show="state.showPopup">
			<view class="main">
				<view class="top">
					<image class="icon-close" :src="`${$imgUrl}common/icon-close.png`" @click="cancel"></image>
				</view>
				<image class="icon-success" :src="`${$imgUrl}bluetooth/card-success.png`"></image>
				<view class="title">{{state.successName}}续期成功！</view>
			</view>
		</view>
	</view>
</template>

<script setup>
	import {
		getCodeName
	} from "@/datas/queryKey.js";

	import {
		reactive,
		ref
	} from "vue";
	import {
		navTo
	} from "@/utils/utils";
	import {
		onLoad,
		onUnload,
		onShow
	} from "@dcloudio/uni-app";
	import {
		request
	} from "@/utils/network/request.js";
	import {
		orderDetail,
		cardRenewal,
		writeCardBack,
		cardModifyConfirm,
		obuRenewal,
		modifyObuVehicleInfo,
		obuActivation,
		renewalTimeApi
	} from "@/utils/network/api.js";
	import {
		getVehiclePlateColor
	} from "@/datas/vehiclePlateColor";
	import {
		searchVehicleInfoQuery
	} from "@/utils/publicRequest";
	const cmd = require("../../../static/etcUtil/cmdConfig.js");
	import {
		IntegerToHexString,
		AsciToHexString,
	} from "@/utils/util/fileData.js";

	import {
		stringToJson
	} from "@/utils/network/encryption";
	const tools = require("../../../static/etcUtil/tools.js");
	const bluetoothUtil = require("../../../static/etcUtil/index.js");
	const state = reactive({
		showPopup: false,
		flag: false,
		successName: ""

	})
	const flag = reactive([])
	const type = ref('')
	const fileDataStrings = reactive({
		approvedCount: 0, //核载人数
		cardId: "", //卡号
		obuId: "", //obu号
		obuId: "", //obu号
		packageNum: "", //套餐编号
		axleCount: 0, //轴数
		axleDistance: "", //轴距
		engineNum: "", //发动机
		vehicleVin: "",
		vehicleEngineNum: "",
		cardStatus: "",
		obuStatus: "",
		type: 0, //类型
		userType: 0, //用户类型
		vehiclePlate: "", //车牌
		vehiclePlateColor: 0, //车牌颜色
		vehicleDimensions: "",
		outlineL: 0, //外廓 长
		outlineW: 0, //外廓 宽
		outlineH: 0, //外廓 高
		wheelCount: "", //车轮数
		vehicleIdNo: "", //车牌号
		vehiclePlateColorStr: "",
		customerTel: "",
		customerId: "",
		orderId: ""
	});
	let cmdRandNum = '';
	const orderInfos = reactive({
		orderId: "",
		ownerName: "",
		ownerIdtype: "",
		ownerIdnum: "",
		vehiclePlate: "",
		vehiclePlateColorStr: "",
		vehiclePlateColor: "",
		vehicleType: "",
		cardId: "",
		cardStatus: "",
		obuId: "",
		obuStatus: "",
		cardEnableTime: "",
		obuEnableTime: "",
		cardExpireTime: "",
		obuExpireTime: ""
	});
	let orderInfo = {};
	onLoad((option) => {
		//请求订单详情
		queryOrderDetail(option.id);
		getOrderDetails(option.id)
	});

	onShow((option) => {
		uni.$on('bluetoothLink', res => {
			console.log(res);
			if (res.status) {
				// 分别写
				if (flag.length == 1) {
					for (var i = 0; i < flag.length; i++) {
						if (flag[i] == 1) {
							state.successName = '卡'
							getCardRenewal()
						} else {
							state.successName = '签'
							getObuRenewal()
						}
					}
				} else {
					state.successName = '卡签'
					// 两个都要写，
					getCardRenewal()

				}

			}
		})

	})
	onUnload(() => {
		//移除监听
		uni.$off('bluetoothLink')
	})
	const choose = (data) => {
		if (!flag.includes(data)) {
			flag.push(data)
			console.log(flag);

		} else {
			flag.splice(flag.indexOf(data), 1)
			console.log(flag);
		}

		if (flag.length == 2) {
			type.value = '3'
		} else if (flag[0] == 1) {
			type.value = '1'
		} else {
			type.value = '2'
		}
	}

	//获取订单详情
	const queryOrderDetail = (id) => {
		const options = {
			type: 2,
			data: {
				id: id,
			},
			method: "POST",
			showLoading: true,
		};
		request(orderDetail, options).then((res) => {
			let orderInfo = JSON.parse(res.bizContent);
			console.log("orderInfo", orderInfo);
			orderInfos.orderId = orderInfo.orderId;
			orderInfos.ownerName = orderInfo.ownerName;
			orderInfos.ownerIdtype = orderInfo.ownerIdtype;
			orderInfos.ownerIdnum = orderInfo.ownerIdnum;
			orderInfos.vehiclePlate = orderInfo.vehiclePlate;
			orderInfos.vehiclePlateColorStr = orderInfo.vehiclePlateColorStr;
			orderInfos.vehiclePlateColor = orderInfo.vehiclePlateColor;
			orderInfos.vehicleType = orderInfo.vehicleType;
			orderInfos.cardId = orderInfo.cardId;
			orderInfos.cardStatus = orderInfo.cardStatus;
			orderInfos.obuId = orderInfo.obuId;
			orderInfos.obuStatus = orderInfo.obuStatus;
			orderInfos.cardExpireTime = orderInfo.cardExpireTime;
			orderInfos.obuExpireTime = orderInfo.obuExpireTime;
			console.log("orderInfos.cardExpiretime", orderInfos.cardExpiretime, orderInfo.cardExpiretime)
		});
	};

	//卡续期 请求
	const getCardRenewal = () => {
		const options = {
			type: 2,
			data: {
				cardId: orderInfos.cardId,
			},
			method: "POST",
			showLoading: true,
		};
		request(cardRenewal, options).then((res) => {
			let result = stringToJson(res.bizContent);
			let cmdArray = result.command.split(",");
			console.log(cmdArray);
			console.log(result.cosRecordId);
			if (cmdArray.length > 0) {
				tools.showLoadingAlert("正在执行指令");
				bluetoothUtil.transCmd(cmdArray, "10", function(res) {
					tools.hideLoadingAlert();
					let status = res[cmdArray.length - 1].substring(res[cmdArray.length - 1].length -
						4, res[cmdArray.length - 1].length);
					if (status == "9000") {
						getCommandBack(result.command, result.cosRecordId, res.toString());
					}
				})
			}
		})
	};

	/**
	 * 写卡指令返回 请求
	 */
	const getCommandBack = (command, cosRecordId, response) => {
		console.log('======循环写卡指令中======')
		tools.showLoadingAlert("加载中");
		let options = {
			type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
			data: {
				cardId: orderInfos.cardId,
				orderId: orderInfos.orderId,
				command: command,
				response: response,
				cosRecordId: cosRecordId,
				cosType: 2
			}, //请求参数
			method: "POST", //提交方式(默认POST)
			showLoading: true, //是否显示加载中(默认显示)
		};

		//调用方式
		request(writeCardBack, options)
			.then((res) => {
				tools.hideLoadingAlert();
				let result = JSON.parse(res.bizContent);
				if (result.orderStatus == 1 || result.orderStatus == "1") {
					tools.showLoadingAlert("执行指令中");
					bluetoothUtil.transCmd(result.command.split(","), "10", function(res) {
						tools.hideLoadingAlert();
						let response = res.toString();
						getCommandBack(result.command, cosRecordId, response);
					});
				} else {
					getCardModifyConfirm(cosRecordId)
				}
			})
	};

	//卡信息变更确认
	const getCardModifyConfirm = (cosRecordId) => {
		const options = {
			type: 2,
			data: {
				cardId: orderInfos.cardId,
				operation: 1,
				cosRecordId: cosRecordId
			},
			method: "POST",
			showLoading: true,
		};
		request(cardModifyConfirm, options).then((res) => {
			// 只写卡
			if (flag.length == 1) {
				sure(1)
				state.showPopup = true;
			} else {
				// 为2要写签
				getObuRenewal()
			}
		})
	}

	//去连接蓝牙
	const toPage = () => {
		console.log("flag.length", flag, type)
		if (flag.length == 0) {
			uni.showToast({
				title: '请至少勾选一项',
				icon: 'none'
			});
		} else {
			console.log("getCurrentPages()", getCurrentPages())
			navTo("/pages/bluetooth/bluetooth?routeType=5"); //去连接蓝牙
		}

	};

	//返回列表
	const toBack = () => {
		uni.redirectTo({
			url: "/pages/service/service"
		})
	}

	//关闭弹窗
	const cancel = () => {
		state.flag = true;
		state.showPopup = false;
		uni.navigateTo({
			url: `/subpackage/after-sale/deviceInfo/deviceInfo`
		})
	}

	//签续期 请求
	const getObuRenewal = () => {
		let cmdArray1 = [cmd.HOME_DIRECTORY, cmd.OBU_SYSTEM_FILE, cmd.RANDOM_NUMBER];
		tools.showLoadingAlert("正在执行指令");
		bluetoothUtil.transCmd(cmdArray1, "20", function(res) {
			tools.hideLoadingAlert();
			var str = res[2].substring(res[2].length - 4, res[2].length);
			if (str == "9000") {
				cmdRandNum = res[2].substring(0, res[2].length - 4);
				const options = {
					type: 2,
					data: {
						obuId: orderInfos.obuId,
						random: cmdRandNum
					},
					method: "POST",
					showLoading: true,
				};
				request(obuRenewal, options).then((res) => {
					let datas = stringToJson(res.bizContent);
					console.log("899", datas, datas.data.APDU);
					if (datas.data.APDU) {
						tools.showLoadingAlert("正在执行指令");
						bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
							tools.hideLoadingAlert();
							console.log("res=====", res, res[0])
							let cmdArr = [cmd.HOME_DIRECTORY, cmd.OBU_DF01, cmd.OBU_EF01, cmd
								.RANDOM_NUMBER
							];
							bluetoothUtil.transCmd(cmdArr, "20", function(res) {
								console.log("chelaing======", res)
								var str = res[3].substring(res[3].length - 4, res[3]
									.length);
								if (str == "9000") {
									cmdRandNum = res[3].substring(0, res[3].length -
										4);
									console.log("0000000000000000000000000")
									getFileData((demos) => {
										modifyVehicle(demos);
									})
								} else {
									tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
								}
							})

						})
					}
				})
			} else {
				tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
			}
		})
	};
	//获取fileData
	const getFileData = (fun) => {
		searchVehicleInfoQuery(orderInfo.vehiclePlate + "_" + orderInfo.vehiclePlateColor,cmdRandNum).then((orderInfo) => {
			console.log("orderInfo==",orderInfo,orderInfo.fileData)
			fun(orderInfo.fileData);
		})
	};
	/**
	 * 修改车辆信息 请求
	 */
	const modifyVehicle = (ites) => {
		tools.showLoadingAlert("加载中");
		console.log('======修改车辆信息======', ites)
		let options = {
			type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
			data: {
				Status: "0",
				random: cmdRandNum,
				obuSerailNo: orderInfos.obuId,
				fileData: ites,
				orderId: orderInfos.orderId,
			}, //请求参数
			method: "POST", //提交方式(默认POST)
			showLoading: true, //是否显示加载中(默认显示)
		};
		//调用方式
		request(modifyObuVehicleInfo, options)
			.then((res) => {
				tools.hideLoadingAlert();
				const datas = stringToJson(res.bizContent);
				console.log("modifyObuVehicleInfo", modifyObuVehicleInfo, datas)
				tools.showLoadingAlert("正在执行指令");
				if (datas.data.APDU) {
					bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
						console.log('执行指令结果', res)
						tools.hideLoadingAlert();
						if (res[0] == "9000") {
							//再次获取随机数
							let cmdArr = [cmd.HOME_DIRECTORY, cmd.RANDOM_NUMBER];
							bluetoothUtil.transCmd(cmdArr, '20', function(res) {
								var str = res[1].substring(res[1].length - 4, res[1].length);
								if (str == "9000") {
									cmdRandNum = res[1].substring(0, res[1].length - 4);
									getObuActivation();
								} else {
									tools.alertF("RANDOM_NUMBER指令长度不符" + res[1]);
								}
							})
						}
					});
				}
			})
	};
	/**
	 * VFJ-OBU在线激活 请求
	 */
	const getObuActivation = () => {
		console.log('======VFJ-OBU在线激活======')
		tools.showLoadingAlert("加载中");
		let options = {
			type: 2, //type: 2,JSON格式提交数据(默认表单形式提交)
			data: {
				random: cmdRandNum,
				obuSerailNo: orderInfos.obuId,
				orderId: orderInfos.orderId,
			}, //请求参数
			method: "POST", //提交方式(默认POST)
			showLoading: true, //是否显示加载中(默认显示)
		};
		//调用方式
		request(obuActivation, options)
			.then((res) => {
				tools.hideLoadingAlert();
				console.log("在线激活 请求");
				console.log(stringToJson(res.bizContent));
				const datas = stringToJson(res.bizContent);
				tools.showLoadingAlert("执行指令");
				console.log("在线激活 请求==========================", datas, datas.data.APDU);
				bluetoothUtil.transCmd([datas.data.APDU], "20", function(res) {
					tools.hideLoadingAlert();
					console.log("在线激活 请求", res);
					if (res[0] == "9000") {
						sure(2)
						state.showPopup = true;
					}
				});
			})
			.catch((err) => {
				console.log(err);
			});
	};
	//获取订单详情
	const getOrderDetails = (id) => {
		console.log('======获取订单信息======')
		const options = {
			type: 2,
			data: {
				id: id,
			},
			method: "POST",
			showLoading: true,
		};
		request(orderDetail, options).then((res) => {
			orderInfo = JSON.parse(res.bizContent);
			console.log("orderInfo", orderInfo);
			console.log("orderInfores", res);
			if (orderInfo) {
				fileDataStrings.userType = orderInfo.userType; //用户类型
				fileDataStrings.cardId = orderInfo.cardId;
				fileDataStrings.packageNum = orderInfo.packageNum;
				fileDataStrings.obuId = orderInfo.obuId;
				fileDataStrings.customerTel = orderInfo.customerTel;
				fileDataStrings.customerId = orderInfo.customerId;
				fileDataStrings.orderId = orderInfo.orderId;
				let vehicleId = orderInfo.vehiclePlate + "_" + orderInfo.vehiclePlateColor
				searchVehicleInfoQuery(vehicleId).then((orderInfo) => {
					fileDataStrings.approvedCount = parseInt(orderInfo.approvedCount); //核载人数
					fileDataStrings.vehicleVin = orderInfo.vin;
					fileDataStrings.vehicleEngineNum = orderInfo.engineNum;
					fileDataStrings.axleCount = parseInt(orderInfo.axleCount); //轴数
					fileDataStrings.engineNum = orderInfo.engineNum; //发动机
					fileDataStrings.type = parseInt(orderInfo.type); //类型
					fileDataStrings.vehiclePlate = orderInfo.vehiclePlate; //车牌
					fileDataStrings.vehiclePlateColor = orderInfo.vehiclePlateColor; //车牌颜色
					console.log("车辆信息", orderInfo)
					fileDataStrings.vehicleDimensions = orderInfo.vehicleDimensions;
					let arr = orderInfo.vehicleDimensions.split("X");
					console.log("orderInfo.vehicleDimensions", orderInfo.vehicleDimensions.split("X"))
					fileDataStrings.outlineL = parseInt(arr[0]); //外廓 长
					fileDataStrings.outlineW = parseInt(arr[1]); //外廓 宽
					if(arr[2].indexOf('mm')){
						fileDataStrings.outlineH = parseInt(arr[2].substring(0, arr[2].length - 2)); //外廓 高
					}else{
						fileDataStrings.outlineH = arr[2] //外廓 高
					}
					fileDataStrings.vehicleIdNo = orderInfo.vehicleEngineNum; //车编号
					fileDataStrings.vehiclePlateColorStr = getVehiclePlateColor(orderInfo
						.vehiclePlateColor);
					console.log("fileDataStrings", fileDataStrings);
				})
			}
		});
	};
	const sure = (val) => {
		var data = {}
		if (val == 1) {
			data = {
				type: "1",
				cardId: fileDataStrings.cardId,
			}
		} else {
			data = {
				type: "2",
				obuId: fileDataStrings.obuId,
			}
		}
		const options = {
			type: 2,
			data: data,
			method: "POST",
			showLoading: true,
		};
		request(renewalTimeApi, options).then((res) => {

		})
	}
</script>

<style>
	page {
		width: 100%;
		height: 100%;
		background-color: #fff;
	}
</style>
<style lang="scss" scoped>
	.mask {
		background: rgba(0, 0, 0, .35);
		position: fixed;
		left: 0;
		top: 0;
		bottom: 0;
		right: 0;
	}

	.main {
		width: 560rpx;
		padding: 25rpx 20rpx 55rpx;
		text-align: center;
		background: #fff;
		position: absolute;
		left: 50%;
		top: 50%;
		transform: translate(-50%, -50%);
		border-radius: 20rpx;

		.top {
			text-align: right;

			.icon-close {
				width: 48rpx;
				height: 48rpx;
			}
		}

		.icon-success {
			width: 500rpx;
			height: 320rpx;
			margin-top: 22rpx;
		}

		.title {
			color: #333333;
			font-size: 40rpx;
			font-weight: 600;
			text-align: center;
			margin-top: 55rpx;
		}
	}

	.selectCar-box {
		// width: 100%;
		// height: 100%;
		padding: 30rpx;

		.title {
			font-size: 30rpx;
			font-family: Microsoft YaHei UI;
			font-weight: 400;
			color: #333333;
			margin-bottom: 30rpx;
		}

		.details {
			.title {
				font-size: 30rpx;
				font-family: Microsoft YaHei UI;
				font-weight: 400;
				color: #333333;
				margin-bottom: 30rpx;
			}

			.details-item {
				display: flex;
				font-size: 26rpx;
				font-family: Noto Sans S Chinese;
				font-weight: 400;
				color: #999999;
				margin-bottom: 30rpx;

				text {
					font-size: 26rpx;
					font-family: Noto Sans S Chinese;
					font-weight: 400;
					color: #333333;
				}
			}
		}

		.card {
			height: 150rpx;
			background: #ffffff;
			box-shadow: 0rpx 4rpx 13rpx 3rpx rgba(223, 223, 223, 0.8);
			border-radius: 20rpx;
			padding: 30rpx;
			display: flex;
			justify-content: space-between;
			align-items: center;
			margin-bottom: 60rpx;

			.card-left {
				display: flex;
				align-items: center;

				image {
					width: 100rpx;
					height: 90rpx;
				}

				.card-center {
					margin-left: 30rpx;

					.card-center-head {
						font-size: 32rpx;
						font-family: Noto Sans S Chinese;
						font-weight: 400;
						color: #333333;
					}

					.tips {
						font-size: 26rpx;
						font-family: Noto Sans S Chinese;
						font-weight: 400;
						color: #666666;

						.tips-card {
							width: 70rpx;
							height: 40rpx;
							background: #d3f2ef;
							border-radius: 6rpx;
							font-size: 20rpx;
							font-family: Noto Sans S Chinese;
							font-weight: 400;
							color: #0a8f8a;
							padding: 5rpx 10rpx;
							margin-left: 20rpx;
						}
					}
				}
			}

			.choose-item1 {
				margin-right: 20rpx;
				/* width: 50rpx; */
				// height: 50rpx;
				/* border: 1rpx solid #00B38B; */
				border-radius: 50%;
				// display: flex;
				// justify-content: center;
				// align-items: center;
				font-size: 25rpx;
				// align-self: end;

				.active {
					width: 38rpx;
					height: 38rpx;
					background: #00b38b;
					border-radius: 50%;
				}
			}

			.choose-item {
				margin-right: 20rpx;
				width: 50rpx;
				height: 50rpx;
				border: 1rpx solid #00B38B;
				border-radius: 50%;
				display: flex;
				justify-content: center;
				align-items: center;

				.active {
					width: 38rpx;
					height: 38rpx;
					background: #00B38B;
					border-radius: 50%;
				}
			}
		}

		.remark {
			font-size: 26rpx;
			font-family: Microsoft YaHei UI;
			font-weight: 400;
			color: #666666;
			text-indent: 30rpx;
			margin-bottom: 30rpx;
		}

		.submit {
			margin-top: 100rpx;
			width: 670rpx;
			height: 80rpx;
			background: linear-gradient(-90deg, #43a1e0 0%, #13e7c1 100%);
			border-radius: 40rpx;
			font-size: 32rpx;
			font-family: Noto Sans S Chinese;
			font-weight: 400;
			color: #ffffff;
			line-height: 80rpx;
		}
	}
</style>