import {
    storeBindingsBehavior
} from 'mobx-miniprogram-bindings'
import {
    store
} from '~/store/index'
import {
    setVideoStatus,
    likeVideo,
    collectVideo,
    submitPlayLog
} from '~/api/video'
import {
    setFans
} from '~/api/user'
import {
    setDuration
} from '~/utils/util'
Component({
    behaviors: [storeBindingsBehavior],
    storeBindings: {
        store,
        fields: {
            pkData: 'pkData',
        },
        actions: {
            setPkData: 'setPkData'
        }
    },
    /**
     * 组件的属性列表
     */
    properties: {
        videoInfo: {
            type: Object,
            value: {},
            observer(newVal) {
                if (newVal.userReadExtend && newVal.userReadExtend.resourcesType == 1) {
                    newVal.userRead.title = newVal.userRead.title.split('\n')
                }
                this.setData({
                    videoInfoCopy: newVal,
                    videoPath: newVal.userRead.videoPath,
                    selfWork: this.data.selfUid == newVal.user.uid,
                    isOfficial: newVal.userRead.type != 'APP_EXAMPLE'
                })
            }
        },
        videoType: {
            type: String,
            // value 为public时是默认公共样式，为my时为“我的”样式，展示下载删除是否公开,pk为pk的样式文案,
            value: 'public',
        },
        currentId: {
            type: Number
        },
        sliderValue: {
            type: Number,
            value: 0,
        },
        currentTime: {
            type: String,
            value: '00:00',
        }
    },
    data: {
        selfUid: wx.getStorageSync('uid'),
        videoInfoCopy: {},
        videoPath: '',
        //userRead.videoPath 和 example.videoPath，
        workType: 'videoPath',
        // 是否官方作品
        isOfficial: false,
        // 是否作者本人
        selfWork: false,
        // 是否显示真实分享按钮
        shareBtn: true
    },
    lifetimes: {
        attached() {
            let {
                userReadExtend,
                userRead
            } = this.data.videoInfoCopy
            if (userReadExtend && userReadExtend.resourcesType == 1) {
                this.setData({
                    endTime: setDuration(userRead.duration)
                })
            }
        }
    },
    methods: {
        shareVideo() {
            this.setData({
                shareBtn: false
            })
            setTimeout(() => {
                this.setData({
                    shareBtn: true
                })
            }, 1500)
        },
        // 播放视频
        playVideo() {
            this.triggerEvent('playVideo', this.data.videoInfoCopy.userRead.id)
            this.submitPlayLog(this.data.videoInfoCopy.userRead.id)
        },
        // 设置进度条
        slider({
            detail
        }) {
            this.triggerEvent('setSeek', detail.value / 100 * this.data.videoInfoCopy.userRead.duration)
        },
        // 设置视频公开还是隐私
        async setVideoPublic() {
            let info = this.data.videoInfoCopy.userRead
            let data = {
                id: info.id,
                status: info.status === 'NORMAL' ? 'DISABLE' : 'NORMAL'
            }
            let res = await setVideoStatus(data)
            if (res.status == 'DISABLE') {
                wx.showToast({
                    title: '该作品仅自己可见',
                    icon: 'none',
                    duration: 2000
                })
            }
            this.setData({
                ['videoInfoCopy.userRead.status']: info.status === 'NORMAL' ? 'DISABLE' : 'NORMAL'
            })
        },
        // 点赞
        async likeVideo() {
            let {
                id
            } = this.data.videoInfoCopy.userRead
            if (this.data.videoInfoCopy.isLike) {
                return
            }
            await likeVideo(id)
            this.setData({
                ['videoInfoCopy.isLike']: true,
                ['videoInfoCopy.userRead.likeAmount']: this.data.videoInfoCopy.userRead.likeAmount + 1
            })
        },
        // 下载视频
        download() {
            wx.showLoading({
                title: '保存到本地',
                mask: true
            })
            const url = this.data.videoInfoCopy.userRead.markPath || ''
            wx.downloadFile({
                url,
                success(res) {
                    if (res.statusCode === 200) {
                        wx.saveVideoToPhotosAlbum({
                            filePath: res.tempFilePath,
                            success(res) {
                                wx.hideLoading()
                                wx.showToast({
                                    title: '成功保存到相册!',
                                    duration: 3000,
                                    icon: 'success',
                                    mask: true
                                })
                            },
                            fail() {
                                wx.hideLoading()
                                wx.showToast({
                                    title: '网络不给力',
                                    icon: 'error',
                                    duration: 3000,
                                    mask: true
                                })
                            }
                        })
                    }
                },
                fail() {
                    wx.hideLoading()
                    wx.showToast({
                        title: '网络不给力',
                        icon: 'error',
                        duration: 3000,
                        mask: true
                    })
                }
            })
        },
        //评论
        openComment() {
            this.triggerEvent('openComment')
            this.setData({
                ['videoInfoCopy.unReadPostsCount']: 0,
            })
        },
        // 删除
        delete() {
            let {
                id
            } = this.data.videoInfoCopy.userRead
            wx.showModal({
                title: '确认删除吗？',
                content: '作品将被永久删除，无法找回。',
                confirmText: '确认',
                cancelText: '取消',
                success: async (res) => {
                    if (res.confirm) {
                        let data = {
                            id,
                            status: 'DEL'
                        }
                        await setVideoStatus(data)
                        wx.showToast({
                            title: '删除成功！',
                            icon: "none"
                        })
                        this.triggerEvent('deleteVideo', this.data.videoInfoCopy.userRead.id)
                    }
                }
            })
        },
        // 收藏课程
        async collect() {
            let {
                id,
                type,
                uid
            } = this.data.videoInfoCopy.userRead
            if (wx.getStorageSync('uid') == uid) {
                return wx.showToast({
                    title: '不能收藏自己作品哦！',
                    icon: "none"
                })
            }
            await collectVideo({
                targetCode: id,
                favoritesType: type
            })
            this.setData({
                ['videoInfoCopy.isFavorites']: !this.data.videoInfoCopy.isFavorites
            })
        },
        // 关注
        async setFans() {
            if (this.data.videoInfoCopy.isFans) {
                return
            }
            await setFans({
                uid: this.data.videoInfoCopy.user.uid
            })
            this.triggerEvent('setListFans', this.data.videoInfoCopy.user.uid)
        },
        jumpUserInfo() {
            wx.navigateTo({
                url: `/pages/personal/index?uid=${this.data.videoInfoCopy.user.uid}&type=user`,
            })
        },
        // 控制音频播放
        audioPlay() {
            this.triggerEvent('playAudio')
            this.submitPlayLog(this.data.videoInfoCopy.userRead.id)
        },
        toPkPage() {
            let videoInfo = this.data.videoInfoCopy
            if (this.properties.videoType == 'pk') {
                if (videoInfo.user.uid == wx.getStorageSync('uid')) {
                    return wx.showToast({
                        title: '不能与自己PK哦~',
                        icon: 'none'
                    })
                }
                this.setPkData({
                    nickName: videoInfo.user.nickName || videoInfo.user.eid,
                    uid: videoInfo.user.uid,
                    avatar: videoInfo.user.avatar,
                    score: videoInfo.userRead.score,
                    audioPath: videoInfo.userRead.audioPath,
                    exampleId: videoInfo.userRead.exampleId,
                    id: videoInfo.userRead.id
                })
            }
            let readId = videoInfo.userRead.id
            let videoType = this.properties.videoType
            let url = ''
            if (!this.data.isOfficial || this.data.selfWork) {
                // autoPlay自动播放
                url = `/pages/reading/index?videoId=${videoInfo.userRead.exampleId}&autoPlay=true`
            } else if (videoType == 'public' || videoType == 'follow') {
                url = `/pages/pkPage/index?videoId=${readId}`
            } else if (videoType == 'pk') {
                // voluntarily自动录制
                url = `/pages/reading/index?videoId=${videoInfo.userRead.exampleId}&readingType=${videoType}&voluntarily=true`
            } else {
                url = `/pages/reading/index?videoId=${videoInfo.userRead.exampleId}`
            }
            wx.navigateTo({
                url
            })
        },
        // pkPage页面示范朗读
        changeRead() {
            this.setData({
                workType: this.data.workType == 'videoPath' ? 'example' : 'videoPath',
            })
            if (this.data.videoInfo.userReadExtend.resourcesType == 1) {
                this.triggerEvent('pkPageAudio', {
                    currentTarget: {
                        dataset: {
                            id: this.data.videoInfoCopy.userRead.id,
                            audio: this.data.workType == 'videoPath' ? this.data.videoInfoCopy.userRead.audioPath : this.data.videoInfoCopy.example.audioPath,
                            isPkPage: true
                        }
                    }
                })
            }
        },
        // 统计作品播放次数
        async submitPlayLog(userReadId) {
            await submitPlayLog({
                userReadId,
                playStopTime: 1000
            })
        },
    }
})