



export enum systemtype {
    ios, android, other
}

export class WxApi
{
    public static recordAldEvent(key:string,value:string=""):void
    {
        // if(Laya.Browser.window && Laya.Browser.window.wx)
        // {
        //     Laya.Browser.window.wx.aldSendEvent(key,{key:value});
        // }
        console.log("事件: ",key);
    }
    static newaccount = false;
    static sceneValue = "";
    static shareOpenId = "";
    static querychannel = "";
    static referrerInfoappId = "";
    static WXLogin(cb: Function) 
    {
        var that = this;
        Laya.Browser.window.wx.login({
            success: function (res) {
                if (res.code) {
                    console.log("code:",res.code);
                    cb(res);
                }
                else {
                    console.log('获取用户登录态失败！' + res.errMsg);
                }
            },
            fail: function (res) { console.log("wx.login: failed, res=" + res); }
        });
    }

    static WxInit() 
    {
        if (!Laya.Browser.onWeiXin) return;

        Laya.Browser.window.wx.showShareMenu(
            {
                withShareTicket: true
            });
        
        Laya.Browser.window.wx.onShow((option) => 
        {
            console.log(option);
            this.shareOpenId = option.query.userId;
            this.querychannel = option.query.channel;
            if(option.referrerInfo)
            {
                this.referrerInfoappId = option.referrerInfo.appId;
                console.log("onShow appId is:", option.referrerInfo.appId);
            }
            this.sceneValue = option.scene;
            var scene = Laya.LocalStorage.getItem("scene");
            if (scene) 
            {
                this.sceneValue = scene;
                console.log("读取配置场景值:" + scene);
            }  
            else 
            {
               console.log("第一次拉取场景值:" + this.sceneValue);
               Laya.LocalStorage.setItem("scene", this.sceneValue)
            }
        });
    }

    //显示加载信息
    private static isShowing = false;
    public static ShowLoading(title: string = "加载中...") 
    {
        // if (this.isShowing) return;
        // this.isShowing = true;
        // (Laya.Browser.onMiniGame) && Laya.Browser.window.wx.showLoading({ title: title, mask: true });
    }

    public static HideLoading() 
    {
        // this.isShowing = false;
        // (Laya.Browser.onMiniGame) && Laya.Browser.window.wx.hideLoading();
    }

    static aldSendOpenid(_openid:string)
    {
        // if(Laya.Browser.onMiniGame)
        // {
        //     console.log("aldSendOpenid",_openid);
        //     Laya.Browser.window.wx.aldSendOpenid(_openid);
        // }
    }
    
    //检测更新
    static CheckWXUpdate() 
    {
        const updateManager = Laya.Browser.window.tt.getUpdateManager();

        updateManager.onCheckForUpdate((res) => {
            console.log("最新版本:" + res.hasUpdate);
        });

        updateManager.onUpdateReady(() => {
            Laya.Browser.window.tt.showModal({
                showCancel: false,
                title: '更新提示',
                content: '新版本已经准备好，是否重启应用？',
                success(res) {
                    updateManager.applyUpdate();
                },
                fail(res?) {
                    updateManager.applyUpdate();
                }
            });
        });
    }

    static levelStart(stageId: string, stageName: string, userId: string): void 
    {
        // console.log("开始记录关卡:" + stageId);
        // if (Laya.Browser.window && Laya.Browser.window.wx) {
        //     Laya.Browser.window.wx.aldStage.onStart(
        //         {
        //             stageId: stageId,     //关卡ID 该字段必传
        //             stageName: stageName, //关卡名称  该字段必传
        //             userId: userId //用户ID 可选
        //         }
        //     );
        //     if(WxApi.newaccount)
        //     {
        //         Laya.Browser.window.wx.aldStage.onStart(
        //             {
        //                 stageId: "新用户:" + stageId,     //关卡ID 该字段必传
        //                 stageName: stageName, //关卡名称  该字段必传
        //                 userId: userId //用户ID 可选
        //             }
        //         ); 
        //     }
        // }
    }

    static levelRunning(stageId: string, stageName: string, userId: string,userevive:string)
    {
        console.log("记录关卡中:" + stageId);
        // if(Laya.Browser.window && Laya.Browser.window.wx)
        // {
        //     Laya.Browser.window.wx.aldStage.onRunning({
        //         stageId   : stageId,   //关卡ID 该字段必传
        //         stageName : stageName,  //关卡名称  该字段必传
        //         userId    : userId, //用户ID 可选
        //         event     : "revive",  //使用道具  关卡进行中，用户触发的操作    该字段必传
        //         params    : {
        //           itemName  : "使用复活",//使用道具名称 该字段必传
        //           itemCount : 1,   //使用道具数量  可选
        //           desc      : userevive //使用道具描述
        //         }
        //       });
        //       if(WxApi.newaccount)
        //       {
        //         Laya.Browser.window.wx.aldStage.onRunning({
        //             stageId   :"新用户:" +  stageId,   //关卡ID 该字段必传
        //             stageName : stageName,  //关卡名称  该字段必传
        //             userId    : userId, //用户ID 可选
        //             event     : "revive",  //使用道具  关卡进行中，用户触发的操作    该字段必传
        //             params    : {
        //               itemName  : "使用复活",//使用道具名称 该字段必传
        //               itemCount : 1,   //使用道具数量  可选
        //               desc      : userevive //使用道具描述
        //             }
        //           })
        //       }
        // }
    }

    static levelSuccess(stageId: string, stageName: string, userId: string): void 
    {
        console.log("记录关卡:完成" + stageId);
        // if (Laya.Browser.window && Laya.Browser.window.wx) {
        //     Laya.Browser.window.wx.aldStage.onEnd(
        //         {
        //             stageId: stageId,     //关卡ID 该字段必传
        //             stageName: stageName, //关卡名称  该字段必传
        //             userId: userId, //用户ID 可选
        //             event: "complete",   //关卡完成  关卡进行中，用户触发的操作    该字段必传
        //             params:
        //                 {
        //                     desc: "关卡完成"   //描述
        //                 }
        //         }
                
        //     );
        //     if(WxApi.newaccount)
        //     {
        //         Laya.Browser.window.wx.aldStage.onEnd(
        //             {
        //                 stageId:"新用户:" + stageId,     //关卡ID 该字段必传
        //                 stageName: stageName, //关卡名称  该字段必传
        //                 userId: userId, //用户ID 可选
        //                 event: "complete",   //关卡完成  关卡进行中，用户触发的操作    该字段必传
        //                 params:
        //                     {
        //                         desc: "关卡完成"   //描述
        //                     }
        //             }
                    
        //         );
        //     }
        // }
    }

    static levelFail(stageId: string, stageName: string, userId: string, score: string, carname: string): void 
    {
        console.log("记录关卡:失败" + stageId);
        // if (Laya.Browser.window && Laya.Browser.window.wx) {
        //     Laya.Browser.window.wx.aldStage.onEnd(
        //         {
        //             stageId: stageId,     //关卡ID 该字段必传
        //             stageName: stageName, //关卡名称  该字段必传
        //             userId: userId, //用户ID 可选
        //             event: "fail",   //关卡完成  关卡进行中，用户触发的操作    该字段必传
        //             params:
        //                 {
        //                     desc: "失败",
        //                     score: score,//描述
        //                     car: carname//描述
        //                 }
        //         }
        //     );
        //     if(WxApi.newaccount)
        //     {
        //         Laya.Browser.window.wx.aldStage.onEnd(
        //             {
        //                 stageId:"新用户:" + stageId,     //关卡ID 该字段必传
        //                 stageName: stageName, //关卡名称  该字段必传
        //                 userId: userId, //用户ID 可选
        //                 event: "fail",   //关卡完成  关卡进行中，用户触发的操作    该字段必传
        //                 params:
        //                     {
        //                         desc: "失败",
        //                         score: score,//描述
        //                         car: carname//描述
        //                     }
        //             }
        //         );
        //     }
        // }
    }

    static OnShow(cb: Function) {
        if (!Laya.Browser.window.tt) return;
        Laya.Browser.window.tt.onShow(cb);
    }

    static OffShow(cb: Function) {
        if (!Laya.Browser.onWeiXin) return;
        Laya.Browser.window.tt.offShow(cb);
    }

    static CanShake = true;

    private static shake(): void 
    {
        Laya.Browser.window.tt.vibrateShort({});
    }

    private static shakeLong(): void 
    {
        Laya.Browser.window.tt.vibrateLong({});
    }

    public static Shake(_short = true) 
    {
        if(Laya.Browser.window.tt && WxApi.CanShake) 
        {
            if(_short) 
            {
                this.shake();
            }
            else 
            {
                this.shakeLong();
            }
        }
        if(!_short)
        {
            this.stageShake();
        }
    }

    /** 是否震动中 */
    static isShake:boolean;
    static times = 1.3;
    static num:number = 0;
    static offsetArr = [0, 0];
    static offset = 14;
    static canshakestage = false;

    static stageShake(callBack:Function = null,speed:number = 32):void
    {
        if(this.isShake || !this.canshakestage) return;
        this.isShake = true;

        var point:Laya.Vector2 = new Laya.Vector2(Laya.stage.x, Laya.stage.y);
        Laya.stage.timerLoop(speed, this, this.shakeObject,[point,callBack]);
    }

    static shakeObject(_point:Laya.Vector2,_callBack):void
    {
        var count:number = (this.num++) % 4;
        this.offsetArr[this.num % 2] = count < 2 ? 0 : this.offset;
        Laya.stage.x = this.offsetArr[0] + _point.x;
        Laya.stage.y = this.offsetArr[1] + _point.y;

        if(this.num > (this.times * 4 + 1))
        {
            Laya.stage.clearTimer(this, this.shakeObject);
            Laya.stage.pos(0,0);
            this.num = 0;
            this.isShake = false;
            if(_callBack != null)
            {
                _callBack();
            }
        }
    }

    public static ShowTxt(text: string) 
    {
        if (Laya.Browser.window.tt) 
        {
            Laya.Browser.window.tt.showToast({ title: text });
        }
        else 
        {
            console.log(text);
        }
    }

    public static get SystemFrom(): systemtype 
    {
        if (!Laya.Browser.onWeiXin) return systemtype.other;

        let info = Laya.Browser.window.wx.getSystemInfoSync();
        var system: string = info.system;
        var IOS = system.indexOf("iOS") != -1;
        var Android = system.indexOf("Android") != -1;

        if (IOS) {
            return systemtype.ios;
        }
        else if (Android) {
            return systemtype.android;
        }
        else {
            return systemtype.other;
        }
    }

    static get IsLongScreenSystem():boolean
    {
        if (!Laya.Browser.onWeiXin) return false;
        let systemInfo = Laya.Browser.window.wx.getSystemInfoSync();
        let platformModel = "ipx";
        if (systemInfo != null) {
        var model = systemInfo.model;
        platformModel = `${systemInfo.brand}_${model}_${systemInfo.system}_wx${systemInfo.version}_SDKVer${systemInfo.SDKVersion}`;
        console.log("platformModel:" + platformModel);
        return  !(model.indexOf("X") < 0) ||
        ((model.indexOf("oppo") >= 0 || model.indexOf("OPPO") >= 0) && (model.indexOf("R15") >= 0 || model.indexOf("r15") >= 0)) ||
        systemInfo.statusBarHeight > 20 ||
        (model.indexOf("Note") >= 0 && (model.indexOf("7") >= 0 || model.indexOf("8") >= 0)) ||
        ((model.indexOf("iPhone") >= 0) && (model.indexOf("11") >= 0))
}
    }

    public static writeStage(stage: number)
    {
        var kvDataList = new Array();
        let date = new Date().getTime();
        var myValue = JSON.stringify({
            "wxgame": 
            {
                "stage": stage,
                "update_time": date.toString(),
            }
        });

        kvDataList.push({key:"stage", value: myValue});
      
        if( Laya.Browser.window.wx)
        {
            Laya.Browser.window.wx.setUserCloudStorage(
                {
                    KVDataList: kvDataList,
                    success: r=>
                    {
                        console.log("上传分数成功");
                    }
                })
        }
    }

    static cpVersionGreaterOrEqual(v1: string, v2: string) 
    {
        console.log(`[LOG]基础库版本号 curVer:${v1} targVer:${v2}`);
        let v1Arr = v1.split(".");
        let v2Arr = v2.split(".");
        let len = v1Arr.length;
        if (v2Arr.length < len) {
            len = v2Arr.length;
        }
        for (let i = 0; i < len; i++) {
            let ver1 = Number(v1Arr[i]);
            let ver2 = Number(v2Arr[i]);
            if (ver1 > ver2) {
                return true;
            }
            else if (ver1 < ver2) {
                return false;
            }
        }
        return v1Arr.length >= v2Arr.length;
    }
}