import Manager from "./Manager";
import { EventConst } from "../ConstDefine/EventConst";
import { ChannelType, PlatformConst } from "../ConstDefine/PlatformConst"

//负责游戏更新
export default class GameUpdateMgr extends Manager {
    static get TypeName(): string { return "GameUpdateMgr" }

    private progress: number = null
    public get Progress(): number { return this.progress }

    public async start() {
        console.log("开始更新...")
        this.progress = 0
        this.startUpdate()
        this.onUpdateFinish()
        console.log("更新完成...")
    }

    public release() {
        
    }

    //检测资源
    private async startUpdate() {
        return new Promise<void>((resovle)=>{
            if (PlatformConst.Channel==ChannelType.Weixin||PlatformConst.Channel==ChannelType.ByteDance) {
                const mgr = wx.getUpdateManager()
                console.log("onCheckForUpdate",mgr)
                if (mgr) {
                    mgr.onCheckForUpdate((res) => {
                        // 请求完新版本信息的回调
                        if (res.hasUpdate) {
                            //如果内存卡有存储游戏相关的离线文件，在更新版本的时候需要清除，避免废文件越来越多
                            wx.showToast({ icon: "none", title: "有新版本了，正在下载中..", duration: 600000 });//10分钟
                        }else{
                            resovle()
                        }
                    })
                    mgr.onUpdateFailed(function () {
                        wx.hideToast()
                        wx.showModal({
                            content: '新版本下载失败了，点击确定重启游戏',
                            title: '更新提示',
                            showCancel: false,
                            success: function (res) {
                                wx.exitMiniProgram()
                                resovle()
                            }
                        })
                        console.log("onUpdateFailed")
                    })
                    mgr.onUpdateReady(function () {
                        wx.hideToast();
                        wx.showModal({
                            content: '新版本已经准备好了，点击确定重启应用',
                            title: '更新提示',
                            showCancel: false,
                            success: function (res) {
                                // if (res.confirm) {
                                //     // 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
                                //     mgr.applyUpdate()
                                // }else{
                                // }
                                mgr.applyUpdate()
                                resovle()
                            }
                        })
                        console.log("onUpdateReady")
                    })
                }else{
                    resovle()
                }
            }
            else{
                resovle()
            }
            
        })

    }

    private onUpdateFinish(): void {
        this.progress = 1
        cc.systemEvent.emit(EventConst.LoadingFinish)
    }
}