import { Fx } from "../GameStart/GameAppStart";

//最大工具类  各种公共方法，以及处理上传，获取后端接口数据
var GameTool = {
    _startTime: 0,
    _endTime: 0,
    _totalTime: 0,
    //获取userId
    Authentication(){
        let name = "user_" + Fx.GameConfig.GM_INFO.gameId;
        var data = JSON.parse(localStorage.getItem(name));
        if(data == "undifend" || data==null || data == ""){
            let url = "https://api.sparkus.cn/api/user/auth/login?domain=hui32579WdYPsgYq&callback="+location.href;
            window.location.href = url;
        }
        else{
            Fx.StorageMessage.setStorage(name,data);
            Fx.GameConfig.GM_INFO.userId = parseInt(data.userId);
        }
    },

    //埋点上传
    setGameData(){
        //GAME_DATA 初始化 每次清零
        Fx.GameConfig.GAME_DATA = [];
        Fx.GameConfig.GAME_DATA.push(Fx.GameConfig.CLICK_DATA);
        Fx.GameConfig.CLICK_init();
        let data = Fx.GameConfig.GAME_DATA;
        let matchId = this.getMatchId();
        let postData = {
            "gameId":Fx.GameConfig.GM_INFO.gameId,
            "userId":Fx.GameConfig.GM_INFO.userId,
            "scode":Fx.GameConfig.GM_INFO.scode,
            "matchId":matchId,
            "data": data
        };

        // console.log("上传数据:",data);
        Fx.HttpUtil.uploadUserLogData(postData,function(){})
    },
    //上传排行榜  type为1
    setRank(data){
        //GAME_DATA 初始化 每次清零
        let postData = {
            "gameId":Fx.GameConfig.GM_INFO.gameId,
            "userId":Fx.GameConfig.GM_INFO.userId,
            "type":1,
            "score": data.score,
            "accuracy": data.date,
            "success": Fx.GameConfig.GM_INFO.success
        };
        Fx.HttpUtil.rankData(1,function(){},postData);
    },
    //获取排行榜 type为2
    getRank(data,callback){
        let rankLength = data.length;
        let postData = {
            "gameId":Fx.GameConfig.GM_INFO.gameId,
            "userId":Fx.GameConfig.GM_INFO.userId,
            "page":1,
            "pageSize":rankLength
        }; 
        //回调进getRankData
        Fx.HttpUtil.rankData(2,data =>{callback(data)},postData);
    },
    //获取matchId  用于上传每次点击数据里面记录id方便查询
    getMatchId (){
        let matchId = cc.sys.localStorage.getItem("matchId");
        let tempId = matchId;
        if(matchId == "undifend" || matchId==null){
            matchId =  this.setMatchId();
        }
        else{
            if(this.containsNanana(matchId) == true){
                matchId =  this.setMatchId();
            }
            else{
                let char = parseInt(tempId.substring(10,tempId.length));
                if(Fx.GameConfig.GM_INFO.level == 1){
                    char += 1;
                    matchId  = tempId.slice(0, 10) + char + "";
                    if(this.containsNanana(matchId)) matchId = this.setMatchId();
                    Fx.GameConfig.GM_INFO.matchId = matchId;
                    cc.sys.localStorage.setItem("matchId",matchId);
                }
            }
        }

        if(this.containsNanana(matchId) == true){
            matchId =  this.setMatchId();
        }
        return matchId;
    },
    //检测matchId 如果有缓存以前的nanana数据清除
    containsNanana(str) {
        return /na/i.test(str);
    },
    //重新设置MatchId
    setMatchId (){
        // 定义包含可用字符的字符集
        const characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        // 创建一个数组以保存随机字符
        const uuidArray = [];
        // 循环10次 生成10位的UUID
        for (let i = 0; i < 10; i++) {
                // 生成随机索引，范围是字符集的长度
            const randomIndex = Math.floor(Math.random() * characters.length);
            // 从字符集中获取随机字符
            const randomChar = characters.charAt(randomIndex);
            // 将字符添加到数组中
            uuidArray.push(randomChar);
        }
        let data =  uuidArray.join('') + 1 + "";
        cc.sys.localStorage.setItem("matchNumber",1);
        cc.sys.localStorage.setItem("matchId",data);
        Fx.GameConfig.GM_INFO.matchId = data;
        return data;
    },
    //截取名字
    subName(name,length){
        if(name.length > length){
            name = name.substring(0,length) + "..."
        }
        return name;
    },
    //设置头像
    setPic(node,pic){
        node.active = false;
        let url = pic;
        setTimeout(() => {
            fetch(url)
            .then(response => {
                return response.headers.get('Content-Length');
            })
            .then(errNo => {
                if(errNo == "5093"){
                    node.active = true;
                }
            })
            .catch(error => {
                // console.error('Error fetching X-Info:', error);
            });
        }, 100);
        cc.assetManager.loadRemote(url, {ext:'.png'},(err, texture:cc.Texture2D) => {
            if(texture){
                node.active = true;
                node.getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(texture);
            }
            else{
                console.log(err,texture)
            }
        })
    },
    //第一个参数把目标带进来处理，第二个参数为名字长度，不同场景不同需求
    //名字4短，小排行，名字6长，大排行
    getRankData(data,target,nameLength){
        target.listData = data.data.list;
        target.selfData = data.data.info;
        let rankData = [];
        let self = false;
         Fx.GameTool.setPic(target.selfNode.getChildByName("pic").getChildByName("icon"),target.selfData.pic);
        for(let i=0;i<=target.listData.length-1;i++){
            rankData.push({rank:(i+1), name:target.listData[i].nickName, total:target.listData[i].score,time:null, pic:target.listData[i].pic});
            if(Fx.GameConfig.GM_INFO.userId == target.listData[i].userId){
                self = true;
                target.rankNumber = i;
                target.selfNode.getChildByName("rankLab").getComponent(cc.Label).string =(i+1) + ""; 
            }
            if(i == (target.listData.length-1) && self == false){
                target.rankNumber = i;
                target.selfNode.getChildByName("rankLab").getComponent(cc.Label).string = "99+"; 
            }
        }
         Fx.GameTool.subName(target.selfData.nickName,nameLength);
        target.selfNode.getChildByName("nameLab").getComponent(cc.Label).string = target.selfData.nickName;
        target.selfNode.getChildByName("totalLab").getComponent(cc.Label).string = target.selfData.score;
        let timeTemp = Fx.GameTool.getTimeShenNong(target.selfData.totleTimes);
        // target.selfNode.getChildByName("timeLab").getComponent(cc.Label).string = timeTemp + "";
        switch(target.selfNode.getChildByName("rankLab").getComponent(cc.Label).string){
            case "1":
                target.selfNode.getChildByName("rank").getChildByName("one").active = true;
                break;
            case "2":
                target.selfNode.getChildByName("rank").getChildByName("two").active = true;
                break;
            case "3":
                target.selfNode.getChildByName("rank").getChildByName("three").active = true;
                break;
        }
        // 大排行
        if(nameLength == 6){
            target.rankList.setData(rankData);
            target.selfNode.opacity = 255;
            if(target.selfData.totalSunCount == 0) target.selfNode.opacity = 0;
        }
    },

    getSeedRandom: function (min, max) {//包含min 不包含max
        console.log("随机数:",Fx.GameConfig.GM_INFO.currSeed);
        max = max || 1;
        min = min || 0;
        Fx.GameConfig.GM_INFO.currSeed = (Fx.GameConfig.GM_INFO.currSeed * 9301 + 49297) % 233280;
        let rnd = Fx.GameConfig.GM_INFO.currSeed  / 233280.0;
        let tmp = min + rnd * (max - min);
        return parseInt(tmp);
    },
    //获取关卡配置的那个关卡数
    getCustom(type){
        let custom = Fx.StorageMessage.getStorage(Fx.storageType.storageTypeCustom);
        if(custom == "undifend" || custom==null || custom == ""){
            this.setCustom();
        }
        else{
            Fx.GameConfig.GM_INFO_SET("custom",custom[0]);
            if(custom[0] != 0 || type ==  true){
                custom.shift();
                if(custom.length == 0){
                    this.setCustom();
                }
                else Fx.StorageMessage.setStorage(Fx.storageType.storageTypeCustom,custom);
            }
        }
    },
    //本地没有存储到配置，或者配置用完，重新创建配置
    setCustom(){
        let arrayLength = Fx.GameConfig.LEVEL_INFO.length;
        let arrayList = [];
        for(let i=1; i<arrayLength;i++){
            arrayList.push(i);
        }
        arrayList.sort(() => Math.random() - 0.5);
        arrayList.unshift(0)
        Fx.GameConfig.GM_INFO_SET("custom",arrayList[0]);
        Fx.StorageMessage.setStorage(Fx.storageType.storageTypeCustom,arrayList);
    },

    //埋点上传
    getUserId(code, callback) {
        let postData = {
            "gameId": cc.fx.GameConfig.GM_INFO.gameId,
            "userId": cc.fx.GameConfig.GM_INFO.userId,
            "code": code
        };
        Fx.HttpUtil.getUserId(postData, callback)
    },


    getSetScreenResolutionFlag: function () {
        let size = cc.winSize;
        let width = size.width;
        let height = size.height;
        if ((height / width) > (16.2 / 9)) return false;
        return true;
    },
    //判断全面屏适配
    setFit: function (canvas) {
        let flag =  Fx.GameTool.getSetScreenResolutionFlag();
        if (flag) {
        	// console.log("不是全面屏");
        } else {
        	// console.log("是全面屏");
        }
        return flag;
    },
    //获取游戏信息
    getGameInfo: function(node){
        var jg = false;
        return jg;
    },
    //设置游戏信息
    setGameInfo: function(pd){
   
    },

    //打字机效果
    typingAni(label,text,cb,target){
        var self = target;
        var html = '';
        var arr = text.split('');
        var len = arr.length;
        var step = 0;
        self.func = ()=>{
            html += arr[step];
            label.string = html;
            if (++step == len) {
                self.unschedule(self.func);
                cb && cb();
            }
        }
        self.schedule(self.func,0.1, cc.macro.REPEAT_FOREVER, 0)
    },

    //输入秒,返回需要展示时间格式
    getTimeMargin:(second) => {
        let total = 0;
        total = second;
        let hour = 0;
        hour = parseInt((total / 3600) + "");//计算整数小时数
        let afterHour = total - hour * 60 * 60;//取得算出小时数后剩余的秒数
        let min = parseInt((afterHour / 60)+"");//计算整数分
        let m = "" + min;  
        if(min < 10) m = "0"+min;
        let afterMin = total - hour * 60 * 60 - min * 60;//取得算出分后剩余的秒数
        let miao = afterMin + "";
        if(afterMin < 10) miao = "0" + afterMin;
        return m + ':' + miao
    },

    //输入秒,返回需要展示时间格式
    getTimeShenNong:(second) => {
        second = parseInt(second/1000+"");
        let total = 0;
        total = second;
        let min = 0;
        if(total > 60){
            min = parseInt((total / 60)+"");//计算整数分
        }
        let m =  min + "'";  

        let afterMin = total - min * 60;//取得算出分后剩余的秒数
        let miao = afterMin + "''";
        return m + miao
    },

    //获取时间戳
    getTime(){
        const timestamp =  (new Date().getTime())
        return timestamp;
    },
    pushLister:function () {
        
    },
    removeAllLister:function () {
        
    },

};
export { GameTool };