<template>
	<view>
		<view class="title">请选择投诉原因</view>
		<view class="list">
			<view class="item">
				<view>{{item}}</view>
				<image class="w30 h30" src="/static/images/arrow_gray.png"></image>
			</view>
			
		</view>
	</view>
</template>

<script>
	import { mapGetters } from 'vuex';
	// complaintRecord
	import{ getTypeTree,loginByMp } from "@/api/course.js"
	export default {
		data() {
			return {
				statusBarHeight: uni.getSystemInfoSync().statusBarHeight,
				menuButtonH: 45,
				pageIndex: 0,
				list: [],
				feedbackItems: [],
				userId: '',
				// courseId: '',
				// videoId: '',
				formdata: {
					complaintContent: ""
				},
				rules: {
					complaintContent:[{
						required: true,
						message: '投诉反馈内容不能为空',
						trigger: ["change", "blur"]
					}]
				},
				text: '',
				templateId: 0,
				user: {},
				isLastChild: 0,
				isLogin: false,
				fileList1: [],
				// projectCode:'',
				code:''
			};
		},
		computed: {
			...mapGetters(['coureLogin']),
		},
		watch: {
		    coureLogin: {
		      immediate: true,          // 页面一进入就检查一次
		      handler(val) {
		        if (val == 2) {
					console.log("AppToken失效，请重新登录")
					this.isLogin = false
					this.goLogin()
		        }
		      }
		    }
		},
		onLoad(option) {
			this.userId = option.userId || ''
			// this.courseId = option.courseId || ''
			// this.videoId = option.videoId || ''
			// this.projectCode = option.projectCode || ''
			uni.$on('usercode',(data)=>{
				if(data) {
					this.code=data.code
					this.goLogin(data)
				}
			})
			// this.utils.getDomain({projectCode:this.projectCode}).then(res=>{
			// 	if(res.code == 200) {
			// 		uni.setStorageSync('addressUrl',res.addressUrl)
			// 		this.utils.isLoginCourseAuto().then(
			// 			res => {
			// 				if(res){
			// 					this.isLogin = true
			// 					this.getMenuButton()
			// 					this.getList()
			// 				} else{
			// 					this.isLogin = false
			// 					this.goLogin()
			// 				}
			// 			},
			// 			rej => {}
			// 		);
			// 	}
			// })
		},
		onUnload() {
			uni.$off('usercode')
		},
		methods: {
			getMenuButton(){
				const menuButtonInfo = uni.getMenuButtonBoundingClientRect()
				this.menuButtonH = menuButtonInfo.height
			},
			goBack() {
				// 返回上一层逻辑
				if (this.pageIndex == 0) {
					uni.navigateBack();
				} else {
					this.pageIndex--;
					this.formdata = {
						complaintContent: ""
					}
					if (this.isLastChild == 1) {
						this.isLastChild = 0
					} else {
						if (this.pageIndex == 0) {
							this.feedbackItems = this.list
							this.templateId = 0
						} else {
							const list = this.findGrandparentOrAllData(this.list, this.templateId)
							this.feedbackItems = list.childrenType
							this.templateId = list.complaintTypeId
						}
					}
				
				}
			},
			findGrandparentOrAllData(data, targetId) {
				// 递归函数，用于查找目标节点的父级节点
				function findParent(node, targetId) {
					if (!node || !node.childrenType) return null;
			
					for (let child of node.childrenType) {
						if (child.complaintTypeId === targetId) {
							return node; // 找到目标节点的父级节点
						}
			
						const result = findParent(child, targetId); // 递归查找子节点
						if (result) return result;
					}
			
					return null;
				}
			
				// 遍历顶层节点，查找目标节点的父级和祖父级节点
				for (let root of data) {
					if (root.complaintTypeId === targetId) {
						return data; // 如果目标节点是顶层节点，返回所有数据
					}
			
					const parent = findParent(root, targetId); // 查找目标节点的父级节点
					if (parent) {
						const grandparent = findParent(root, parent.complaintTypeId); // 查找父级节点的父级节点
						return grandparent || data; // 如果找到祖父节点返回祖父节点，否则返回所有数据
					}
				}
			
				return data; // 如果没有找到目标节点，返回所有数据
			},
			handleClick(item,index) {
				if (this.isLastChild == 1) return
				if (this.pageIndex >= 0) {
					this.pageIndex++
					let children = this.feedbackItems[index].childrenType || [];
					this.templateId = this.feedbackItems[index].complaintTypeId
					this.formdata = {
						complaintContent: ""
					}
					this.text = this.feedbackItems[index].complaintTypeName
					if (children.length > 0) {
						this.isLastChild = 0
						this.feedbackItems = children
						this.templateId = this.feedbackItems[0].complaintTypeId
					} else {
						this.isLastChild = 1
						this.formdata = {
							complaintContent: ""
						}
						setTimeout(() => {
							this.$refs.uForm.setRules(this.rules)
						}, 200)
					}
				}
			},
			getList(){
				getTypeTree().then(res=>{
					if(res.code == 200) {
						this.list = res.data
						this.pageIndex = 0
						this.feedbackItems = this.list
					}
				})
			},
			submit() {
				if(this.fileList1.some(item=>item.status == 'uploading')) {
					uni.showToast({
						title: '等待图片上传中',
						icon: 'none'
					})
					return
				}
				var images=[];
				this.fileList1.forEach(function(element) {
					images.push(element.url)
				});
				this.$refs.uForm.validate().then(res => {
					if (res) {
							uni.showModal({
								title: '',
								content: '我们已收到您的反馈，谢谢',
								showCancel: false,
								success: function (res) {
									if (res.confirm) {
										uni.navigateBack()
									} else if (res.cancel) {
										uni.navigateBack()
									}
								}
							});
					}
				})
			},
			deletePic(event) {
				this[`fileList${event.name}`].splice(event.index, 1)
			},
			async afterRead(event) {
				// 当设置 multiple 为 true 时, file 为数组格式，否则为对象格式
				let lists = [].concat(event.file)
				let fileListLen = this[`fileList${event.name}`].length
				lists.map((item) => {
					this[`fileList${event.name}`].push({
						...item,
						status: 'uploading',
						message: '上传中'
					})
				})
				for (let i = 0; i < lists.length; i++) {
					const result = await this.uploadFilePromise(lists[i].url)
					let item = this[`fileList${event.name}`][fileListLen]
					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
						status: 'success',
						message: '',
						url: result
					}))
					fileListLen++
				}
			},
			uploadFilePromise(url) {
				const projectCode = uni.getStorageSync('projectCode')
				return new Promise((resolve, reject) => {
					let a = uni.uploadFile({
						url: uni.getStorageSync('addressUrl_'+projectCode)+ '/app/common/uploadOSS', // 仅为示例，非真实的接口地址
						filePath: url,
						name: 'file',
						success: (res) => {
							setTimeout(() => {
								console.log(JSON.parse(res.data).url)
								resolve(JSON.parse(res.data).url)
							}, 1000)
						}
					});
				})
			},
			goLogin(data) {
				if(!this.projectCode){
					uni.showToast({
						title: '链接有误',
						icon: 'none'
					});
					return
				} 
				this.loginFsUserWx(data)
				return
				this.utils.getProvider().then(provider=>{
					console.log('当前的环境商',provider)
					if (!provider) {
					  reject()
					}
					uni.login({
						provider: provider,
						success: async loginRes => {
							console.log(loginRes)
							uni.getUserInfo({
							   provider: provider,
							   success: (infoRes)=> {
								    uni.showToast({
										title: '处理中...',
										icon: 'loading'
								    });
									loginByMp({code: loginRes.code,encryptedData:infoRes.encryptedData,iv:infoRes.iv,appId:getApp().globalData.appId}).then(res=>{
										 uni.hideLoading();
										 if (res.code == 200) {
											 this.$store.commit('setCoureLogin', 1);
											uni.setStorageSync(this.utils.TOKEN_KEYAuto, res.token);
											uni.setStorageSync('auto_userInfo', JSON.stringify(res.user));
											this.userId = res.user.userId || ''
											this.isLogin = true
											this.getMenuButton()
											this.getList()
										 } else {
											uni.showToast({
												title: res.msg,
												icon: 'none'
											});
										 }
									 }).catch(err=>{
										uni.hideLoading();
										uni.showToast({
											icon:'none',
											title: "登录失败,请重新登录",
										});
									});
							   }
							});
						}
					})
				}).catch(err => {})
			},
			// H5授权绑定关系
			async loginFsUserWx(data){
				if(data){
					let token = uni.getStorageSync('TOKEN_WEXIN');
					let user = uni.getStorageSync('userInfo')
					
					uni.setStorageSync(this.utils.TOKEN_KEYAuto, token);
					uni.setStorageSync('auto_userInfo', JSON.stringify(user));
					this.userId = user.userId || ''
					this.isLogin = true
					this.getMenuButton()
					this.getList()
				}else{
					uni.setStorageSync('H5course',{
						companyId: this.urlOption.companyId,
						companyUserId:this.urlOption.companyUserId,
						type: 1, //1自动，其他手动
					})
					uni.showLoading({ title: '加载中' });
										
					try {
					  await this.utils.getDomain({ projectCode: this.projectCode}); // code 换成你的业务标识
					  await this.utils.getConfigKey();
					  uni.navigateTo({
					  	url:'/pages_course/webview?H5course='+uni.getStorageSync('H5course')
					  })
					} catch (err) {
					  console.error('初始化失败', err);
					  uni.showToast({ title: '请求失败', icon: 'none' });
					} finally {
					  uni.hideLoading();
					}
				}
			}
		}
	};
</script>

<style scoped lang="scss">


	.title {
text-align: center;
font-size: 40rpx;
font-weight: 500;
	}
	.list{
		padding: 24rpx;
		.item{
			display: flex;
			justify-content: space-between;
			align-items: center;
		}
	}
</style>
