<template>
	<view class="details">
		<!-- 视频 -->
		<view class="details-video" v-if="isPaly">
			<video class="details-video-con" id="myVideo" @timeupdate="timeUpdate" :src="videoInfo.videoUrl" controls
				:initial-time="initial_time" object-fit="fill" play-btn-position="center" @tap="videoClick">
				<cover-view class="video-control">
					<cover-view class="multi rate" @tap.stop="showSwitchRate">x {{ currentRate }}</cover-view>
				</cover-view>
				<cover-view class="multi-list rate" :class="{ active: rateShow }">
					<cover-view v-for="(item, index) in ['0.5', '1.0', '1.5', '2.0']" :key="index"
						class="multi-item rate" :data-rate="item" @tap="switchRate"
						:class="{ active: item == currentRate }">
						{{ item }}
					</cover-view>
				</cover-view>
			</video>
		</view>
		<!-- 介绍 -->
		<view class="details-content">
			<view class="details-content-title">{{ videoInfo.chapterName }}</view>
			<view class="details-content-progress">本课程
				共{{ info.amount }}课，已学完{{ info.finishCount }}课，共进度{{ info.finishPercent || 0 }}%</view>
			<view class="details-content-teacher">主讲老师：{{ info.presenter }}</view>
			<view class="details-content-info">{{ videoInfo.chapterInfo }}</view>
		</view>

		<!-- 课程章节 -->
		<view class="details-classes">
			<view class="details-classes-header">
				<view>精选课程</view>
				<view>更多
					<u-icon name="arrow-right" size="22" color="#A3A3A3" />
				</view>
			</view>
			<view class="details-classes-list">
				<view class="details-classes-list-item" v-for="(item, index) in info.chapterList" :key="index"
					:class="{'active': index === videoIndex }" @click="classesClick(index)">
					<view>{{ index + 1 }}</view>
					<view>{{ item.flag === 2 ? '已学' : (item.finishPercent + '%') }}</view>
				</view>
			</view>
		</view>
		<view class="details-line">
			<view></view>
		</view>
		<!-- 评论 -->
		<view class="details-comment">
			<view class="details-comment-header">
				<view>课程评论</view>
				<view>共{{ total }}条评论</view>
			</view>
			<view class="details-comment-list">
				<view class="details-comment-list-item" v-for="(item, index) in commentList" :key="index">
					<view class="left">
						<u-avatar :src="item.createByAvatar" size="96" mode="square"></u-avatar>
					</view>
					<view class="right">
						<view>{{ item.createBy }}</view>
						<view>
							<u-rate :count="5" size="24" disabled="" active-color="#C4C4C4" v-model="item.starLevel">
							</u-rate>
							<text>{{ item.createTime }}</text>
						</view>
						<view>{{ item.content }}</view>
					</view>
				</view>
			</view>
			<view class="details-comment-page" v-if="total">
				<wyb-pagination :padding="0" :totalItems="total" :current="query.pageNum" @change="pageChange" />
			</view>

			<view class="details-comment-mine">
				<text>我的评论</text>
			</view>

			<view class="details-comment-conent">
				<view class="details-comment-conent-star">
					<u-rate :count="5" size="40" active-color="#FFBC00" v-model="form.starLevel"></u-rate>
				</view>
				<view class="details-comment-content-textarea">
					<u-input v-model="form.content" placeholder="请输入您的评价" type="textarea"
						:custom-style="{ backgroundColor: '#F5F5F5', padding: '30rpx', borderRadius: '10rpx', minHeight: '280rpx' }">
					</u-input>
				</view>
				<view class="details-comment-conent-button" @click="submitCommet">提交</view>
			</view>
		</view>
		<u-toast ref="uToast" />
	</view>
</template>

<script>
	import wybPagination from '@/components/wyb-pagination/wyb-pagination.vue'
	export default {
		data() {
			return {
				info: {},
				videoContext: uni.createVideoContext('myVideo', this),
				videoInfo: {},
				videoIndex: 0,
				// 视频实时时间
				initial_time: 0,
				// 视频已经播放时间
				playedTime: 0,
				rateShow: false, // 倍速浮层
				currentRate: 1.0, // 默认倍速
				// 视频实际时间
				video_real_time: 0,
				classesId: '',
				isPaly: true,
				query: {
					pageNum: 1,
					pageSize: 5,
					tabId: ''
				},
				total: 0,
				commentList: [],
				form: {
					tabId: '',
					starLevel: 0,
					content: ''
				}
			}
		},
		onLoad(page) {
			if (page.id) {
				this.getClassesDetails(page.id);
				this.classesId = page.id
			}
		},
		beforeDestroy() {
			this.submitTimeLong({
				tabId: this.videoInfo.id,
				playDuration: this.video_real_time
			}, 0, true)
		},
		methods: {
			/**
			 * 显示倍速浮层
			 * @param {Object} rate
			 */
			showSwitchRate(rate) {
				let that = this;
				that.rateShow = true;
			},
			/**
			 * 切换倍速
			 * @param {Object} e
			 */
			switchRate(e) {
				let that = this;
				let rate = Number(e.currentTarget.dataset.rate);
				that.currentRate = rate;
				that.rateShow = false;
				this.videoContext.playbackRate(rate);
			},
			/**
			 * 视频点击
			 * @param {Object} e
			 */
			videoClick(e) {
				this.rateShow = false;
			},
			/**
			 * 获取课程详情
			 * @param {Object} id
			 */
			getClassesDetails(id) {
				this.$u.api.training.getOnlineDetailsApi({
					id
				}).then(res => {
					if (res.code === 200) {
						this.info = res.data;
						this.videoInfo = res.data.chapterList[this.videoIndex];
						this.initial_time = Number(res.data.chapterList[this.videoIndex].playDuration)
						this.video_real_time = Number(res.data.chapterList[this.videoIndex].playDuration)
						this.playedTime = Number(res.data.chapterList[this.videoIndex].playDuration)
						this.query.tabId = res.data.chapterList[this.videoIndex].id
						this.form.tabId = res.data.chapterList[this.videoIndex].id
						this.query.pageNum = res.data.page;
						this.isPaly = true
						this.getCommentList();
					}
				})
			},
			/**
			 * 课程章节点击
			 * @param {Object} index
			 */
			classesClick(index) {
				this.isPaly = false
				this.submitTimeLong ({
					tabId: this.videoInfo.id,
					playDuration: this.video_real_time
				}, index);
			},
			/**
			 * 控制视频不能快进
			 * @param {Object} e
			 */
			timeUpdate(e) {
				let isReady = 1; // 是否开启可以视频快进 1 禁止开启
				if (this.videoInfo.finishPercent === 100) {
					isReady = 3;
				}
				//跳转到指定播放位置 initial-time 时间为秒
				let that = this;
				//播放的总时长
				let duration = e.detail.duration
				//实时播放进度 秒数
				let currentTime = parseInt(e.detail.currentTime)
				//当前视频进度
				let jump_time = 0
				if (that.video_real_time == 0) {
					jump_time = parseInt(that.initial_time) + parseInt(that.video_real_time)
				} else {
					jump_time = parseInt(that.video_real_time)
				}
				if (jump_time === currentTime) {
					isReady = 3;
				}
				if(isReady === 1){
					if (currentTime > jump_time && currentTime - jump_time > 3) {
						let videoContext = wx.createVideoContext('myVideo')
						videoContext.seek(that.video_real_time)
						wx.showToast({
							title: '未完整看完该视频，不能快进',
							icon: 'none',
							duration: 2000,
						})
					}
				}
				if (currentTime > this.playedTime) {
					that.playedTime = currentTime //实时播放进度
				}
				that.video_real_time = currentTime //实时播放进度
			},
			/**
			 * 提交课程时长
			 */
			submitTimeLong({
				tabId,
				playDuration
			}, index, flag) {
				this.$u.api.training.videoTimeLongApi({
					tabId,
					playDuration
				}).then(res => {
					if (res.code === 200) {
						if (!flag) {
							this.$refs.uToast.show({
								title: '已记录章节时长!',
								type: 'success'
							})
							this.videoInfo = this.info.chapterList[index]
							this.form.tabId = this.videoInfo.id
							this.query.tabId = this.videoInfo.id
							this.videoIndex = index
							this.getClassesDetails(this.classesId);
						}
					} else {
						this.$refs.uToast.show({
							title: res.msg,
							type: 'error'
						})
					}
				})
			},
			/**
			 * 获取评论列表
			 */
			getCommentList() {
				this.$u.api.training.getClassesCommentApi(this.query).then(res => {
					if (res.code === 200) {
						this.total = Number(res.data.total);
						this.commentList = res.data.rows
					}
				})
			},
			/**
			 * @param {Object} e 分页触发
			 */
			pageChange(e) {
				this.query.pageNum = e.current
				this.getCommentList()
			},
			/**
			 * 提交评论
			 */
			submitCommet() {
				if (this.form.starLevel && this.form.content) {
					this.$u.api.training.addClassesCommentApi(this.form).then(res => {
						if (res.code === 200) {
							this.$refs.uToast.show({
								title: '评论成功!',
								type: 'success'
							})
							this.form.content = ''
							this.form.starLevel = 0
							this.getCommentList();
						} else {
							this.$refs.uToast.show({
								title: res.msg,
								type: 'error'
							})
						}
					})
				}
				if (!this.form.starLevel) {
					this.$refs.uToast.show({
						title: '请选择星级',
						type: 'warning'
					})
				}
				if (!this.form.content) {
					this.$refs.uToast.show({
						title: '请输入评论内容',
						type: 'warning'
					})
				}
			}
		}
	}
</script>

<style lang="scss" scoped>
	@import './onlineTrainingDetails.scss';
</style>
