<template>
	<view class="phone-kaoshi-page">
		<customNavbarVue :title="data.name" :show-back-btn="true" @back="handleBack"></customNavbarVue>
		<!-- 第一行 -->
		<view class="kaoshi-page-title">
			<view v-if="activeSt" class="title-types">{{dlName}}</view>
			<view>100分钟</view>
		</view>


		<view class="kaoshi-shiti-content">
			<!-- 内容区域 -->
			<!-- 试题区域 -->
			<view v-if="activeSt">
				<template v-if="activeSt.stTypeId == 1">
					<!-- 单选 -->
					<danxuan :question="activeSt" :key="activeSt.stId"></danxuan>
				</template>
				<template v-if="activeSt.stTypeId == 2">
					<!-- 多选 -->
					<duoxuan :question="activeSt" :key="activeSt.stId"></duoxuan>
				</template>
				<template v-if="activeSt.stTypeId == 3">
					<!-- 判断 -->
					<panduan :question="activeSt" :key="activeSt.stId"></panduan>
				</template>
				<template v-if="activeSt.stTypeId == 4">
					<!-- 填空 -->
					<tiankong :question="activeSt" :key="activeSt.stId"></tiankong>
				</template>
				<template v-if="activeSt.stTypeId == 5">
					<!-- 简答 -->
					<jianda :question="activeSt" :key="activeSt.stId"></jianda>
				</template>
				<template v-if="activeSt.stTypeId == 6">
					<!-- 阅读 -->
					<yuedu :question="activeSt" :key="activeSt.stId" @yudu-change="onYueduChange"></yuedu>
				</template>
			</view>

		</view>
		<template v-if="activeSt">
			<button type="default" size="mini" hover-class="none" class="phone-green-btn ks-btn-prev"
				@click="handlePrev" v-if="!isFistStId">上一题</button>
			<button type="default" size="mini" hover-class="none" class="phone-green-btn ks-btn-next"
				@click="handleNext" v-if="!isLastStId">下一题</button>
		</template>
		<!-- 答案解析 -->
		<scoreAndAnswerVue ref="scoreAnswerRef"></scoreAndAnswerVue>
		<scoreAndAnswerAdminTiankong ref="scoreAnswerTkRef"></scoreAndAnswerAdminTiankong>
		<scoreAndAnswerAdminJianda ref="scoreAnswerJdRef"></scoreAndAnswerAdminJianda>
	</view>



</template>

<script setup>
	import {
		ref,
		reactive,
		computed,
		watch
	} from "vue";
	import {
		onLoad
	} from "@dcloudio/uni-app";
	import * as cjApi from "@/api/chengji.js"
	import danxuan from "@/components/questionsChengji/danxuan.vue";
	import duoxuan from "@/components/questionsChengji/duoxuan.vue";
	import tiankong from "@/components/questionsChengji/tiankong.vue";
	import panduan from "@/components/questionsChengji/panduan.vue";
	import jianda from "@/components/questionsChengji/jianda.vue";
	import yuedu from "@/components/questionsChengji/yuedu.vue";
	import scoreAndAnswerVue from "@/components/scoreAndAnswer/scoreAndAnswerAdmin.vue";
	import scoreAndAnswerAdminTiankong from "@/components/scoreAndAnswer/scoreAndAnswerAdminTiankong.vue";
	import scoreAndAnswerAdminJianda from "@/components/scoreAndAnswer/scoreAndAnswerJianda.vue";
	import customNavbarVue from "@/components/custom-navbar/custom-navbar.vue";
	import {
		useQuestionTools
	} from "@/components/questions/useQuestionTools.js";

	const {
		checkDanxuanReply,
		checkDuoxuanReply,
		checkPanduanReply,
		checkTiankongReply,
		getLetterByIndex,
		checkJiandaReply,
		checkYueduReply
	} = useQuestionTools();

	const stTypes = {
		1: '单选题',
		2: '多选题',
		3: '判断题',
		4: '填空题',
	}

	const popupRef = ref(null)
	const scoreAnswerRef = ref(null)
	const scoreAnswerTkRef = ref(null)
	const startCountDown = ref(false);
	const scoreAnswerJdRef = ref(null);

	const data = reactive({
		hisId: null,
		name: '',
		stTotal: 0,
		stScore: 0,
		biaoji: null,
		endSecond: 0,
		pageSize: 0,
		toggleScreenFlag: 0,
		toggleScreenSecond: 0,
		zhuapai: 0,
		duanluo: [],
		markDB: [],
		StListForSearch: [],
	})

	const yuduIndexQa = ref(null);

	const questionData = ref([]);

	const progress = reactive({
		dlIndex: 0,
		dtIndex: 0
	})

	const dlName = computed(() => {
		if (data.StListForSearch && activeSt.value) {
			return data.StListForSearch[activeSt.value.onlyNum - 1].paragraphName
		} else {
			return ''
		}
	})

	watch(() => data.duanluo, (newVal) => {
		// 计算已答试题数量
	}, {
		deep: true
	})

	const activeSt = computed(() => {
		if (questionData.value.length) {
			return questionData.value.length && questionData.value[progress.dlIndex].qas[progress.dtIndex];
		} else {
			return null
		}
	})

	const isFistStId = computed(() => {
		if (data.StListForSearch.length) {
			return data.StListForSearch[0].stId == activeSt.value.stId
		} else {
			return false
		}
	});
	const isLastStId = computed(() => {
		if (data.StListForSearch.length) {
			return data.StListForSearch[data.StListForSearch.length - 1].stId == activeSt.value.stId
		} else {
			return false
		}
	});

	onLoad((option) => {
		data.hisId = option.hisId;
		data.name = option.name;

		initKaoshi();
	})

	function onTimeUp() {
		console.log('end')
	}

	function showAnswerCard() {
		popupRef.value.open('top')
	}

	function handlePopupBack() {
		popupRef.value.close()
	}

	function handlePrev() {
		const qa = data.StListForSearch.find(item => item.stId == activeSt.value.stId);
		const index = qa.num - 1;
		if (index > 0) {
			const result = data.StListForSearch[index - 1];
			progress.dlIndex = result.dlIndex;
			progress.dtIndex = result.dtIndex
		}
		// 切换试题时清空阅读提解析
		yuduIndexQa.value = null;
	}

	function handleNext() {
		const qa = data.StListForSearch.find(item => item.stId == activeSt.value.stId);
		const index = qa.num - 1;
		if (index < data.StListForSearch.length) {
			const result = data.StListForSearch[index + 1];
			progress.dlIndex = result.dlIndex;
			progress.dtIndex = result.dtIndex
		}
		// 切换试题时清空阅读提解析
		yuduIndexQa.value = null
	}

	function formatDuanluoList(dlData) {
		let uIndex = 0; // 试题num
		let iDuanluo = 0; // 段落num
		let result = [];
		for (const duanluo of data.duanluo) {
			let paragraph = {
				qas: [],
			};
			paragraph.name = duanluo.name;

			let iQa = 0; // 当前试题序号
			let order = 0; // 当前题型中第几题
			for (const iDanxuan of duanluo.danxuan) {
				iDanxuan.type = 'danxuan';
				iDanxuan.marked = false;
				iDanxuan.onlyNum = uIndex + 1;
				iDanxuan.order = order;
				iDanxuan.iQa = iQa;
				iDanxuan.reply = iDanxuan.result;
				paragraph.qas.push(iDanxuan);
				uIndex++;
				order++;
				iQa++;

				data.StListForSearch.push({
					stId: iDanxuan.stId,
					paragraphName: paragraph.name,
					dlIndex: iDuanluo,
					dtIndex: iDanxuan.iQa,
					num: iDanxuan.onlyNum
				})
			}
			order = 0;
			for (const iDuoxuan of duanluo.duoxuan) {
				iDuoxuan.type = 'duoxuan';
				iDuoxuan.marked = false;
				iDuoxuan.onlyNum = uIndex + 1;
				iDuoxuan.order = order;
				paragraph.qas.push(iDuoxuan);
				iDuoxuan.reply = iDuoxuan.result;
				iDuoxuan.iQa = iQa;
				uIndex++;
				order++;
				iQa++;

				data.StListForSearch.push({
					stId: iDuoxuan.stId,
					paragraphName: paragraph.name,
					dlIndex: iDuanluo,
					dtIndex: iDuoxuan.iQa,
					num: iDuoxuan.onlyNum
				})
			}
			order = 0;
			for (const iPanduan of duanluo.panduan) {
				iPanduan.type = 'panduan';
				iPanduan.marked = false;
				iPanduan.onlyNum = uIndex + 1;
				iPanduan.order = order;
				paragraph.qas.push(iPanduan);
				iPanduan.reply = iPanduan.result;
				iPanduan.iQa = iQa;
				uIndex++;
				order++;
				iQa++;

				data.StListForSearch.push({
					stId: iPanduan.stId,
					paragraphName: paragraph.name,
					dlIndex: iDuanluo,
					dtIndex: iPanduan.iQa,
					num: iPanduan.onlyNum
				})
			}
			order = 0;
			for (const iTiankong of duanluo.tiankong) {
				iTiankong.type = 'tiankong';
				iTiankong.marked = false;
				iTiankong.onlyNum = uIndex + 1;
				iTiankong.order = order;
				paragraph.qas.push(iTiankong);
				iTiankong.reply = iTiankong.result.map(item => item[0]);
				iTiankong.iQa = iQa;
				uIndex++;
				order++;
				iQa++;

				data.StListForSearch.push({
					stId: iTiankong.stId,
					paragraphName: paragraph.name,
					dlIndex: iDuanluo,
					dtIndex: iTiankong.iQa,
					num: iTiankong.onlyNum
				})
			}
			order = 0;
			for (const iJianda of duanluo.jianda) {
				iJianda.marked = false;
				iJianda.type = 'jianda';
				iJianda.onlyNum = uIndex + 1;
				iJianda.order = order;
				iJianda.iQa = iQa;
				paragraph.qas.push(iJianda);
				iJianda.reply = '';
				uIndex++;
				order++;
				iQa++;

				data.StListForSearch.push({
					stId: iJianda.stId,
					paragraphName: paragraph.name,
					dlIndex: iDuanluo,
					dtIndex: iJianda.iQa,
					num: iJianda.onlyNum
				})
			}
			order = 0;
			for (const iYuedu of duanluo.yuedu) {
				iYuedu.marked = false;
				iYuedu.type = 'yuedu';
				iYuedu.onlyNum = uIndex + 1;
				iYuedu.order = order;
				iYuedu.iQa = iQa;

				if (iYuedu.duoxuan && iYuedu.duoxuan.length) {
					iYuedu.duoxuan.map((qIt) => {
						qIt.reply = qIt.reply || [];
						return qIt
					})
				}

				if (iYuedu.tiankong && iYuedu.tiankong.length) {
					iYuedu.tiankong.map((qIt) => {
						qIt.reply = new Array(qIt.count).fill('');
						return qIt;
					});
				}

				paragraph.qas.push(iYuedu);
				iYuedu.reply = [];
				uIndex++;
				order++;
				iQa++;

				data.StListForSearch.push({
					stId: iYuedu.stId,
					paragraphName: paragraph.name,
					dlIndex: iDuanluo,
					dtIndex: iYuedu.iQa,
					num: iYuedu.onlyNum
				})
			}

			iDuanluo++;
			questionData.value.push(paragraph)

			console.log(questionData.value)
			console.log(paragraph)
		}
	}
	// 切换阅读小题时更新当前试题解析
	function onYueduChange(qa) {
		yuduIndexQa.value = qa;
	}

	// 校验阅读解析
	function checkYueduJiexi() {
		debugger
		let qa = yuduIndexQa.value;
		let score = qa.userScore;
		let reply = '';
		let result = '';
		let answer = qa.answer;
		if (qa.stTypeId == 0) {
			// 单选题
			if (qa.reply && qa.reply.trim() !== '') {
				reply = getLetterByIndex(qa.reply)
			} else {
				reply = '未答'
			}

			if (qa.result) {
				result = getLetterByIndex(qa.result)
			} else {
				result = '无答案'
			}
			scoreAnswerRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 2) {
			// 多选题

			if (qa.reply && qa.reply.length) {
				reply = qa.reply.map(item => {
					if (item.trim()) {
						return getLetterByIndex(item.trim())
					}
				}).join(',')
			} else {
				reply = '未答'
			}
			if (qa.result) {
				result = qa.result.map(item => {
					if (item.trim()) {
						return getLetterByIndex(item.trim())
					}
				}).join(',')
			} else {
				result = '无答案'
			}
			scoreAnswerRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 3) {
			// 判断题
			if (qa.reply === '') {
				reply = '未答'
			} else if (qa.reply == 0) {
				reply = '错误'
			} else if (qa.reply == 1) {
				reply = '正确'
			}
			if (qa.result == 0) {
				result = '错误'
			} else if (qa.result == 1) {
				result = '正确'
			}
			scoreAnswerRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 4) {
			let reply = qa.reply || [];
			let result = qa.result || [];
			// 填空题
			scoreAnswerTkRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 5) {
			// 简单题
			let reply = qa.reply ? '未答' : qa.reply;
			let result = qa.result;
			scoreAnswerJdRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}

	}

	// 获取解析
	function handleCheckJiexi() {
		const qa = activeSt.value;
		let score = qa.userScore;
		let reply = '';
		let result = '';
		let answer = qa.answer;
		if (qa.stTypeId == 1) {
			// 单选题
			if (qa.reply && qa.reply.trim() !== '') {
				reply = getLetterByIndex(qa.reply)
			} else {
				reply = '未答'
			}

			if (qa.result) {
				result = getLetterByIndex(qa.result)
			} else {
				result = '无答案'
			}
			scoreAnswerRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 2) {
			// 多选题

			if (qa.reply && qa.reply.length) {
				reply = qa.reply.map(item => {
					if (item.trim()) {
						return getLetterByIndex(item.trim())
					}
				}).join(',')
			} else {
				reply = '未答'
			}
			if (qa.result) {
				result = qa.result.map(item => {
					if (item.trim()) {
						return getLetterByIndex(item.trim())
					}
				}).join(',')
			} else {
				result = '无答案'
			}
			scoreAnswerRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 3) {
			// 判断题
			if (qa.reply === '') {
				reply = '未答'
			} else if (qa.reply == 0) {
				reply = '错误'
			} else if (qa.reply == 1) {
				reply = '正确'
			}
			if (qa.result == 0) {
				result = '错误'
			} else if (qa.result == 1) {
				result = '正确'
			}
			scoreAnswerRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 4) {
			let reply = qa.reply || [];
			let result = qa.result || [];
			// 填空题
			scoreAnswerTkRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 5) {
			// 简单题
			let reply = qa.reply;
			let result = qa.result;
			scoreAnswerJdRef.value.showPopup({
				score,
				reply,
				result,
				answer
			})
		}
		if (qa.stTypeId == 6) {
			// 简单题
			checkYueduJiexi()
		}

	}

	function handleBack() {

		// uni.redirectTo({
		// 	url: "/pages/score/index"
		// })
	uni.navigateBack()
	}

	function initKaoshi() {
		cjApi.lookChengjiView({
			hisId: data.hisId
		}).then(res => {
			const {
				hisId,
				duanluoList
			} = res.data;
			data.hisId = hisId;
			data.duanluo = duanluoList;
			formatDuanluoList(data.duanluo);
			uni.setNavigationBarTitle({
				title: data.name
			});
		})
	}
</script>