import CourseVideoItem from '@/business-components/course-video-item'
import SectionDetail from '@/business-components/section-detail'
import ColHeader from '@/components/col-header'
import ColVideo from '@/components/col-video'
import request from '@/helpers/request'
import {
  Cell,
  Icon,
  Rate,
  Tab,
  Tabs,
  Image,
  Button,
  Sticky,
  Field,
  List,
  Toast
} from 'vant'
import { defineComponent } from 'vue'
import styles from './video-class-detail.module.less'
import { state } from '@/state'

import iconStudent from '@common/images/icon_student.png'
import dayjs from 'dayjs'
import ColResult from '@/components/col-result'

export default defineComponent({
  name: 'VideoClassDetail',
  data() {
    const query = this.$route.query
    return {
      groupId: query.groupId,
      classId: query.classId,
      tabIndex: 1,
      title: '',
      lessonPrice: 0,
      useRelationType: '',
      alreadyBuy: false,
      currentClassIndex: 1,
      detailList: [],
      posterUrl: '',
      srcUrl: '',
      message: '',
      navHeight: 0 as any,
      reload: false,
      videoContent: '',
      list: [],
      dataShow: true, // 判断是否有数据
      loading: false,
      finished: false,
      params: {
        page: 1,
        rows: 20
      },
      freeRate: 0, // 试看百分比
      trySee: false, // 是否试看
      videoHeight: '212px'
    }
  },
  computed: {
    users() {
      return state.user.data
    },
    offsetTop() {
      const navHeight: number = this.navHeight
      const top = Number(navHeight) + 44
      return top + 'px'
    }
  },
  async mounted() {
    this.navHeight = sessionStorage.getItem('navHeight') || 0
    try {
      const res = await request.get(
        '/api-teacher/videoLessonGroup/selectVideoLesson',
        {
          params: {
            groupId: this.groupId
          }
        }
      )
      const result = res.data || {}
      this.title = result.lessonGroup.lessonName
      this.useRelationType = result.lessonGroup.relationType
      this.lessonPrice = result.lessonGroup.lessonPrice
      this.alreadyBuy = result.alreadyBuy
      this.detailList = result.detailList || []

      if (state.user.data?.userId !== result.lessonGroup.teacherId) {
        this.trySee = !result.alreadyBuy
      }

      this.detailList.forEach((item: any, index: number) => {
        if (item.id === Number(this.classId)) {
          this.posterUrl = item.coverUrl
          this.srcUrl = item.videoUrl
          this.title = item.videoTitle
          this.currentClassIndex = index + 1
          this.videoContent = item.videoContent
        }
      })

      const config = await request.get(
        '/api-student/sysConfig/queryByParamNameList',
        {
          params: {
            paramNames: 'video_lesson_free_rate'
          }
        }
      )
      this.freeRate = config.data[0]?.paramValue || 0

      this.getList()
    } catch {}
  },
  methods: {
    onSearch() {
      this.params.page = 1
      this.list = []
      this.dataShow = true // 判断是否有数据
      this.loading = false
      this.finished = false
      this.getList()
    },
    async getList() {
      try {
        const params = this.params
        const res = await request.post('/api-student/videoLesson/page', {
          data: {
            ...params,
            videoId: this.classId
          }
        })
        this.loading = false
        const result = res.data || {}
        console.log(result)
        // 处理重复请求数据
        if (this.list.length > 0 && result.pageNo === 1) {
          return
        }
        this.list = this.list.concat(result.rows || [])
        this.finished = result.pageNo >= result.totalPage
        this.params.page = result.pageNo + 1
        this.dataShow = this.list.length > 0
      } catch {
        this.dataShow = false
        this.finished = true
      }
    },
    onPlay(item: any) {
      // 判断是否点击的是当前播放的视频
      if (item.id === Number(this.classId)) {
        return
      }
      this.reload = true
      this.posterUrl = item.imgUrl
      this.srcUrl = item.videoUrl
      this.title = item.title
      this.currentClassIndex = item.index
      this.videoContent = item.content
      this.classId = item.id
      this.onSearch()
      setTimeout(() => {
        this.reload = false
      }, 0)
    },
    async onSubmit() {
      try {
        await request.post('/api-teacher/videoLesson/evaluate', {
          data: {
            isTeacher: 1,
            videoId: this.classId,
            content: this.message,
            studentId: state.user.data.userId
          }
        })
        Toast('评论成功')
        this.message = ''
        setTimeout(() => {
          this.onSearch()
        }, 1000)
      } catch {}
    }
  },
  render() {
    return (
      <div class={styles['video-class-detail']}>
        {/* <ColHeader
          v-slots={{
            default: () => (
              <ColVideo
                src={this.srcUrl}
                poster={this.posterUrl}
                freeRate={Number(this.freeRate)}
                trySee={this.trySee}
                height={this.videoHeight}
              />
            )
          }}
        /> */}
        <ColHeader />
        <ColVideo
          src={this.srcUrl}
          poster={this.posterUrl}
          freeTitleStatus={this.lessonPrice > 0 ? true : false}
          freeRate={Number(this.freeRate)}
          trySee={this.trySee}
          height={this.videoHeight}
        />
        <Cell
          border={false}
          class={styles.cell}
          title={this.title}
          titleClass={styles.titleInfo}
          v-slots={{
            icon: () => (
              <Icon
                name="video"
                size={18}
                color="var(--van-primary)"
                style={{ display: 'flex', alignItems: 'center' }}
              />
            ),
            value: () => (
              <div class={styles.label}>
                <span>{this.currentClassIndex}</span>/{this.detailList.length}
                课时
              </div>
            )
          }}
        ></Cell>
        <div class={styles.videoDesc}>{this.videoContent}</div>

        <Tabs
          v-model:active={this.tabIndex}
          class={styles.infoField}
          color="var(--van-primary)"
          lineWidth={20}
          sticky
          lazyRender
          offsetTop={this.offsetTop}
        >
          <Tab title="目录" name={1}>
            <div style={{ height: 'calc(100vh - 320px)', overflowY: 'auto' }}>
              <SectionDetail title="课程列表" icon="courseList">
                {this.detailList.map((item: any, index: number) => {
                  const musicAlbumInfos = item.musicAlbumInfos || []
                  const temp = musicAlbumInfos.map((info: any) => {
                    return {
                      relationMusicAlbum: info.relationType,
                      musicAlbumName: info.name,
                      musicAlbumId: info.musicAlbumId,
                      status: info.status,
                      useRelationType: this.useRelationType
                    }
                  })
                  return (
                    <CourseVideoItem
                      musicAlbumInfos={temp}
                      playId={Number(this.classId)}
                      detail={{
                        id: item.id,
                        title: item.videoTitle,
                        content: item.videoContent,
                        imgUrl: item.coverUrl,
                        videoUrl: item.videoUrl,
                        index: index + 1
                      }}
                      onPlay={this.onPlay}
                      onMusicAlbumDetail={(item: any) => {
                        if (!this.alreadyBuy && !item.status) {
                          Toast('数据正在更新，请稍后再试')
                          return
                        }
                        if (item.relationMusicAlbum === 'MUSIC') {
                          this.$router.push({
                            path: '/music-detail',
                            query: {
                              id: item.musicAlbumId
                            }
                          })
                        } else if (item.relationMusicAlbum === 'ALBUM') {
                          this.$router.push({
                            path: '/music-album-detail/' + item.musicAlbumId
                          })
                        }
                      }}
                    />
                  )
                })}
              </SectionDetail>
            </div>
          </Tab>
          <Tab title="讨论" name={3}>
            <div
              style={{
                overflowY: 'auto',
                marginBottom:
                  'calc(var(--van-cell-vertical-padding) * 2 + var( --van-cell-line-height))'
              }}
            >
              {this.dataShow ? (
                <List
                  v-model:loading={this.loading}
                  finished={this.finished}
                  finishedText=" "
                  immediateCheck={false}
                  onLoad={this.getList}
                >
                  {this.list.map((item: any) => (
                    <Cell
                      class={[
                        styles['message-list'],
                        item.isTeacher === 1 && styles['message-active']
                      ]}
                      valueClass={styles['message-time']}
                      v-slots={{
                        icon: () => (
                          <Image
                            class={styles.userLogo}
                            src={item.avatar || iconStudent}
                            fit="cover"
                          />
                        ),
                        title: () => (
                          <div class={styles.title}>
                            <div class={styles['message-name']}>
                              {item.userName}
                            </div>
                            <div class={styles['message-time']}>
                              {dayjs(item.evaluateTime).format(
                                'YYYY年MM月DD日'
                              )}
                            </div>
                          </div>
                        ),
                        label: () => (
                          <div class={styles.label}>{item.content}</div>
                        )
                      }}
                    />
                  ))}
                </List>
              ) : (
                <ColResult btnStatus={false} tips="暂无讨论" />
              )}
            </div>

            <div class={[styles.messageContainer]}>
              <Field
                placeholder="快来讨论吧～"
                v-model={this.message}
                v-slots={{
                  button: () => (
                    <Button
                      type="primary"
                      disabled={!this.message}
                      style={{ padding: '0 20px' }}
                      size="small"
                      round
                      onClick={this.onSubmit}
                    >
                      发布
                    </Button>
                  )
                }}
              />
            </div>
          </Tab>
        </Tabs>
      </div>
    )
  }
})
