import request from '@/student/home-layout-orchestra/request-home'
import { verifyUrl } from '@/helpers/toolsValidate'
import { openDefaultWebView } from '@/student/home-layout-orchestra/state-orchestra'
import { PullRefresh, Swipe, SwipeItem, Image, Tabs, Tab, Popup } from 'vant'
import { defineComponent } from 'vue'
import HotAlbum from './components/hot-album'
import InfoList from './components/info-list'
import MenuList from './components/menu-list'
import Music from './components/music'
import RecommendSage from './components/recommend-sage'
import TalentStyle from './components/talent-style'
import TheHomeHeader from './components/TheHomeHeader'
import VideoClass from './components/video-class'
import styles from './index.module.less'
import Download from './model/download'
import popupClose from './images/popup-close.png'
import {
  listenerMessage,
  postMessage,
  promisefiyPostMessage,
  removeListenerMessage
} from '@/helpers/native-message'
import { browser } from '@/helpers/utils'
import { setLogout, state } from '@/state'
import event from './event'

export default defineComponent({
  name: 'home-index',
  props: {
    album: {
      type: Array,
      default: () => {
        return []
      }
    }
  },
  data() {
    return {
      loading: false,
      height: 'auto' as any,
      banner: [], // BANNER列表
      appMenu: [], // 按钮列表
      albumList: [], // 热门专辑
      musicList: {
        topMusicSheet: [] as any,
        newMusicSheet: [] as any,
        hotMusicSheet: [] as any
      },
      sageList: [], // 推荐达人
      videoList: [], // 视频课
      headerHeight: 0,
      downloadStatus: false
    }
  },
  async mounted() {
    await this.init()

    event.on('downloadApp', async () => {
      // 管乐团里面，获取是否已安装酷乐秀
      const type = browser().orchestraAndroid
        ? 'com.cooleshow.student'
        : 'ColexiuStudent://'
      await promisefiyPostMessage({
        api: 'isInstall',
        content: { type: type }
      }).then((res: any) => {
        const content = res.content
        state.orchestraInfo.installStatus = content.installStatus
        this.downloadStatus = true
      })
    })

    listenerMessage('webViewOnResume', () => {
      promisefiyPostMessage({ api: 'getUserAccount' }).then((res: any) => {
        const content = res.content
        // console.log(state.orchestraInfo, 'state.orchestraInfo')
        // console.log(content, 'content')
        if (content.phone !== state.orchestraInfo.phone) {
          // 判断是否已经有关联编号
          if (content.unionId) {
            window.location.reload()
          } else {
            state.orchestraInfo.token = content.token.split(' ')[1]
            state.orchestraInfo.phone = content.phone
            state.orchestraInfo.nickname = content.nickname
            state.orchestraInfo.avatar = content.avatar
            state.orchestraInfo.unionId = content.unionId || 0
            // 13310106048
            // 15088666723
            setLogout()
            // window.location.reload()
            this.$router.push({
              path: '/home-auth'
            })
          }
        }
      })
    })

    postMessage({ api: 'setBarStatus', content: { status: 0 } })
  },
  unmounted() {
    removeListenerMessage('webViewOnResume', () => {
      //
    })
  },
  methods: {
    async init() {
      try {
        const res = await request.post('/api-cms/news/app/home', {
          data: {
            clientType: 'STUDENT'
          }
        })
        const result = res.data || {}
        this.banner = result.banner || []
        this.appMenu = this.arrChange(5, result.appMenu || [])

        // 热门专辑
        const album = await request.post('/api-student/music/album/list', {
          data: {
            albumStatus: 1,
            clientId: 'STUDENT'
          }
        })
        this.albumList = album.data.rows || []

        // 曲谱
        const music = await request.post(
          '/api-student/music/sheet/appMusicSheet',
          {
            data: {}
          }
        )
        const musicData = music.data || []
        this.musicList = {
          topMusicSheet: this.arrChange(4, musicData.topMusicSheet || []),
          newMusicSheet: this.arrChange(4, musicData.newMusicSheet || []),
          hotMusicSheet: this.arrChange(4, musicData.hotMusicSheet || [])
        }

        const sage = await request.get(
          '/api-student/teacher/queryHotTeacherList'
        )
        this.sageList = sage.data || []

        const video = await request.get(
          '/api-student/courseSchedule/queryLiveAndVideo'
        )
        this.videoList = video.data.videoList || []
      } catch {
        //
      }
      setTimeout(() => {
        this.loading = false
      }, 500)
    },
    arrChange(num: number, arr: any) {
      const newArr = [] as any
      while (arr.length > 0) {
        newArr.push(arr.splice(0, num))
      }
      return newArr
    },
    async onRefresh() {
      await this.init()
      setTimeout(() => {
        this.loading = false
      }, 500)
    }
  },
  render() {
    return (
      <div class={styles.home}>
        <TheHomeHeader
          ref="header"
          onHeaderDom={(height: number) => {
            console.log(height, 'height')
            this.headerHeight = height
          }}
          onCart={() => {
            event.emit('downloadApp')
          }}
          onSearch={() => {
            // 搜索详情
            event.emit('downloadApp')
          }}
          onMore={() => {
            event.emit('downloadApp')
          }}
        />

        <PullRefresh
          v-model={this.loading}
          loading-text="正在刷新..."
          success-text="刷新完成"
          onRefresh={() => this.onRefresh()}
        >
          <div class={styles.hotContent}>
            <Swipe class={styles.swipe} autoplay={3000}>
              {this.banner.map((item: any) => (
                <SwipeItem
                  onClick={() => {
                    // 判断url是否正常
                    // if (verifyUrl(item.linkUrl)) {
                    //   openDefaultWebView(item.linkUrl, () => {
                    //     window.location.href = item.linkUrl
                    //   })
                    // }
                    event.emit('downloadApp')
                  }}
                >
                  <Image
                    class={styles.swipeItemImg}
                    src={item.coverImage}
                    fit="fill"
                  />
                </SwipeItem>
              ))}
            </Swipe>

            <MenuList productList={this.appMenu} />
          </div>

          <HotAlbum album={this.albumList} />

          <Music title="推荐曲目" music={this.musicList?.topMusicSheet || []} />
          <Music title="最新曲目" music={this.musicList?.newMusicSheet || []} />
          <Music title="最热曲目" music={this.musicList?.hotMusicSheet || []} />

          {/* 推荐达人 */}
          <RecommendSage sage={this.sageList} />

          {/* 精品视频课 */}
          <VideoClass video={this.videoList} />

          <Tabs
            shrink
            background="#f6f8f9"
            class={styles.homeTabs}
            sticky
            offsetTop={this.headerHeight + 'px'}
          >
            <Tab title="达人风采" name="sage">
              <TalentStyle />
            </Tab>
            <Tab title="热门资讯" name="info">
              <InfoList />
            </Tab>
          </Tabs>
        </PullRefresh>

        <Popup
          v-model:show={this.downloadStatus}
          round
          style={{ width: '86%', background: 'transparent' }}
          closeable
          closeIcon={popupClose}
        >
          <Download
            buttonText={
              state.orchestraInfo.installStatus ? '打开酷乐秀' : '下载酷乐秀'
            }
            onConfirm={() => {
              const type = browser().orchestraAndroid
                ? 'com.cooleshow.student'
                : 'ColexiuStudent://'
              if (state.orchestraInfo.installStatus) {
                postMessage({ api: 'openApp', content: { type: type } })
              } else {
                const url = browser().orchestraAndroid
                  ? window.location.origin +
                    window.location.pathname +
                    '#/download'
                  : 'https://itunes.apple.com/cn/app/id1626971695?mt=8'
                postMessage({
                  api: 'downloadApp',
                  content: { type: type, url: url }
                })
              }
            }}
          />
        </Popup>
        {/*
          ColexiuStudent IOS 学生端
          com.cooleshow.student ADNROID 学生端
          com.cooleshow.teacher ADNROID 老师端
         */}
      </div>
    )
  }
})
