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: '',
      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
      }
    }
  },
  computed: {
    users() {
      return state.user.data
    },
    offsetTop() {
      let 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.detailList = result.detailList || []
      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
        }
      })
      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 {
        let 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} />
            )
          }}
        />
        <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
          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) => (
                  <CourseVideoItem
                    class={'mb12'}
                    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}
                  />
                ))}
              </SectionDetail>
            </div>
          </Tab>
          {/* <Tab title="简介" name={2}>
            <Cell
              class={styles['open-teacher-info']}
              border={false}
              v-slots={{
                icon: () => (
                  <Image
                    class={styles.userLogo}
                    src={this.users?.headUrl || iconStudent}
                    fit="cover"
                  />
                )
              }}
            >
              <div class={styles['teacher-info']}>
                <div class={styles['users']}>
                  <div class={styles['teacher-name']}>
                    {this.users?.username}
                  </div>
                  <Rate
                    modelValue={this.users?.starGrade}
                    iconPrefix="iconfont"
                    color="#FFC459"
                    void-icon="star_default"
                    icon="star_active"
                    size={15}
                  />
                </div>
                <div class={styles.level}>粉丝{this.users?.fansNum}</div>
              </div>
              <div class={styles['teacher-desc']}>
              </div>
            </Cell>
            <SectionDetail>
              <p class={styles.introduction}>课程介绍</p>
            </SectionDetail>
          </Tab> */}
          <Tab title="讨论" name={3}>
            <div
              style={{
                // height: 'calc(100vh - 365px)',
                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>

            {/* <Sticky offsetBottom={0} position="bottom"> */}
            <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>
            {/* </Sticky> */}
          </Tab>
        </Tabs>
      </div>
    )
  }
})
