cc.Class({
    extends: cc.Component,
    properties: {
        rankingScrollView: cc.ScrollView,   //显示好友排行榜
        scrollViewContent: cc.Node,    //显示好友排行榜的内容
        rankItem: cc.Prefab,  //好友排行榜内容的预制体
        rankItemNode: cc.Node,  //当前玩家本人的信息节点

        overRanking: cc.Node,  //显示游戏结束的排行榜
        overRankItem: cc.Prefab,   //游戏结束排行榜内容的预制体

        upPlayerData:cc.Node,  //显示待超越好友信息
        rootNode: cc.Node,  //适配节点
        _isFind: false,  //在好友数据中找到自己的数据
        _isFindGroup: false,
    },

    // use this for initialization
    onLoad: function () {
        // this._isFind = false;
        this._isFindGroup =false;
        console.log("onLoad 子域");
    },

    start:function(){      
        console.log("call start.....");
        this.initMgr();
    },
    
    initMgr:function(){
        //这是全局的公众变量
        cc.HQ = {};
        //公共变量
        cc.HQ.Global = require('Global');
        //微信接口
        cc.HQ.WechatApi = require('WechatApi');
        //在这里打开微信分享监听和获取群分享时的shareTicket以及接收微信进来时带的参数．
        cc.HQ.WechatApi.get_data_from_main(this);
        //判断一个有没有数据，如果有数据的话就记录一个分享成功

    },

    /*********************处理微信排行榜信息start**************************/
    //显示好友列表数据
    onShow: function(data,num,curScore){
            console.log("好友数据++++++++++++++",num);
            if(data.length >1){
                cc.HQ.Global.sortData(data); //把数据排下序
            }
            if(num ==1){  //显示好友排行榜
                this.rankingScrollView.node.active =true;  //正常排行榜显示
                this.rankItemNode.active =true;
                this.scrollViewContent.removeAllChildren();
                //数据的处理
                this.onShowNum1(data);
                
            }else if(num ==2){  //显示游戏结束排行榜
                this.overRanking.active =true;
                this.overRanking.removeAllChildren();
                this._isFindGroup =false;
                //数据的处理
                this.onShowNum2(data);
            }else{   //显示将要超越的玩家信息
                this.upPlayerData.active =true;   
                //数据的处理
                this.onShowNum3(data,curScore);
            }
    },
    
    //数据处理，显示排行榜
    onShowNum1: function(data){
        // console.log("数据？？？？？",data,cc.HQ.WechatApi.openId);
        this._isFind = false;
        if(!data.length){   //没有数据时
            this.onUserData({name:cc.HQ.WechatApi.playName,
                score: 0,
                url:cc.HQ.WechatApi.imgUrl
            });    
        }else{
            for (let i = 0; i < data.length; i++) {
                var playerInfo = data[i];
                var item = cc.instantiate(this.rankItem);
                item.getComponent('rankItem').init(i, playerInfo);
                this.scrollViewContent.addChild(item);
                //显示自身信息
                this.onShowMySelfData(playerInfo,i);
            }
            this.rankingScrollView.scrollToTop(0.1);
        }
    },
    
    //数据处理，显示结束排行榜
    onShowNum2: function(data){
        // console.log("排序之后数据的结束排行榜",data);
        var arr=[];
        var brr=[];
        if(!data.length){   //没有数据时
            var obj ={
                KVDataList:[{key:"score",value:"0"}],
                avatarUrl:cc.HQ.WechatApi.imgUrl,
                nickname:cc.HQ.WechatApi.playName
            }
            arr.push(0,obj,0);
            brr.push(0,"暂无排名",0); 
        }else{
            for(let i= 0; i<data.length;i++) {
                if(!this._isFindGroup){    //找到了自己的数据，就不能再把数组arr,brr置空  (this._isFindGroup为true时表示已找到自己的数据)
                    arr=[];
                    brr=[];    
                }
                this.onShowOverData(arr,brr,i,data);
            }
        }
    
        console.log("查看arr数组数据",arr,brr);
        for(var i=0;i<arr.length;i++){
            var playerInfo = arr[i];
            if(playerInfo){
                // console.log("5555555555555555555555");
                var item = cc.instantiate(this.overRankItem);
                item.getComponent('overRankItem').init(brr[i], playerInfo);
                this.overRanking.addChild(item);
            }else{
                // console.log("66666666666666666666666");
                //相当于添加一个空的预制体节点，占一个位置
                var item = cc.instantiate(this.overRankItem);
                item.getComponent('overRankItem').onClear();
                this.overRanking.addChild(item);
            }
        }
    },
    
    //数据处理，显示前一名玩家信息
    onShowNum3: function(data,curScore){
        // console.log("上一家的数据信息",data);
        if(!data.length){
            this.upPlayerData.active =false;
            return;
        }
        for(var i=data.length-1;i>=0;i--) {
            if(Number(data[i].KVDataList[0].value) > curScore){
                this.upPlayerData.active =true;
                this.upPlayerData.getChildByName("labScore").getComponent(cc.Label).string = data[i].KVDataList[0].value;
                var node =this.upPlayerData.getChildByName("headNode").getChildByName("doufuHead");
                this.showSpHead(node,data[i].avatarUrl);
                break;
            }else{  //排行榜中分数没有超过这个score分数的
                this.upPlayerData.active =false;
            }
        }
    },
    
    //显示结束排行榜信息
    onShowOverData: function(arr,brr,i,data){
        if(this._isFindGroup){
            return;
        }
        if(cc.HQ.WechatApi.openId ==data[i].openid){
            // console.log("33333333333333333333");
            if(!data[i-1]){  //当你是第一名时
                arr.push(0,data[i],data[i+1]);
                brr.push(0,i,i+1);
            }else if(!data[i+1]){  //当你是倒数第一名时
                arr.push(data[i-1],data[i],0);
                brr.push(i-1,i,0);
            }else{
                arr.push(data[i-1],data[i],data[i+1]);
                brr.push(i-1,i,i+1);
            }
            this._isFindGroup =true;
        }else{
            // console.log("444444444444444444444");
            var obj ={
                KVDataList:[{key:"score",value:"0"}],
                avatarUrl:cc.HQ.WechatApi.imgUrl,
                nickname:cc.HQ.WechatApi.playName
            }
            arr.push(0,obj,0);
            brr.push(0,"暂无排名",0);         
        } 
    },

    //显示好友排行榜信息
    onShowMySelfData: function(playerInfo,i){
        if(this._isFind){
            return;
        }
        if(cc.HQ.WechatApi.openId == playerInfo.openid){  //在上方显示自身的信息
            //显示玩家自身信息
            this.onUserData({name:playerInfo.nickname,
                score:playerInfo.KVDataList[0].value,
                url:playerInfo.avatarUrl,
                rank: i
            });
            this._isFind = true;
        }else{    //若此玩家是新玩家没有数据，就显示此玩家的微信登陆信息(头像名字...)
            this.onUserData({name:cc.HQ.WechatApi.playName,
                score: 0,
                url:cc.HQ.WechatApi.imgUrl
            });
        }    
    },

    //显示玩家自身信息
    onUserData: function(data){
        this.rankItemNode.getChildByName("labName").getComponent(cc.Label).string = data.name;
        this.rankItemNode.getChildByName("labScore").getComponent(cc.Label).string ="第"+data.score+"关";
        var node =this.rankItemNode.getChildByName("dfHeadNode").getChildByName("spdoufuHead");
        if(data.rank >=0){  //当玩家有玩过时显示自身信息就不显示排名，反之显示排名
            this.rankItemNode.getChildByName("labRank").active =true;
            this.rankItemNode.getChildByName("labRank").getComponent(cc.Label).string =(data.rank+1);
        }else{
            this.rankItemNode.getChildByName("labRank").active =false;
        }
        //显示头像图片
        this.showSpHead(node,data.url);
    },
    
    //显示玩家头像
    showSpHead: function(node,avatarUrl){
        if (CC_WECHATGAME) {
            try {
                let image = wx.createImage();
                image.onload = () => {
                    try {
                        let texture = new cc.Texture2D();
                        texture.initWithElement(image);
                        texture.handleLoadedTexture();
                        node.getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(texture);
                    } catch (e) {
                        cc.log(e);
                        node.active = false;
                    }
                };
                image.src = avatarUrl;
            }catch (e) {
                cc.log(e);
                node.active = false;
            }
        } else {
            cc.loader.load({
                url: avatarUrl, type: 'jpg'
            }, (err, texture) => {
                node.getComponent(cc.Sprite).spriteFrame = new cc.SpriteFrame(texture);
            });
        }
    },
   
    //当局得分不论是多少，都在结束排行榜上显示目前所得分数。
    onDealWith: function(data,score){
        console.log("自己的openid",data.score);
        for(let i= 0; i<data.length;i++) {
            if(cc.HQ.WechatApi.openId ==data[i].openid){
                data[i].KVDataList[0].value = score;
                break;
            }
        }
    },
    
    //当前分数超过排行榜就更新
    onTopScoreShow: function(data,data1){
        var top =null;   //排行榜上自己的分数
        var top1 =null;  //当前游戏自己的分数
        for(let i= 0; i<data.length;i++) {
            if(cc.HQ.WechatApi.openId ==data[i].openid){
                top = data[i].KVDataList[0].value;
            }
        }
    
        for(let j= 0; j<data1.length;j++) {
            if(cc.HQ.WechatApi.openId ==data1[j].openid){
                top1 = data1[j].KVDataList[0].value;
            }
        }
    
        //若当局分数大于排行榜分数，就把当局分数更新到排行榜上
        if(Number(top1) > Number(top)){
            for(var k= 0; k<data.length;k++) {
                if(cc.HQ.WechatApi.openId ==data[k].openid){
                    data[k].KVDataList[0].value =top1;
                }
            }
        }
    },
    
    //排行榜及其他节点全部隐藏
    onHide: function(){
        this.rankingScrollView.node.active =false;
        this.rankItemNode.active =false;
        this.overRanking.active =false;
        this.upPlayerData.active =false;
    },
    
    /*********************处理微信排行榜信息end**************************/
    onStage: function(){
        console.log("子域111");
        if (this.node.width < 750) {
            this.rootNode.setScale(this.node.width / 750);
        }
        cc.view._convertPointWithScale=function(point) {
            var viewport = this._viewPortRect;
            point.x = (point.x - viewport.x) / (this._scaleX / 2);
            point.y = (point.y - viewport.y) / (this._scaleY / 2);
        };
        cc.view._convertTouchesWithScale=function(touches) {
            var viewport = this._viewPortRect, scaleX = this._scaleX / 2, scaleY = this._scaleY / 2, selTouch, selPoint, selPrePoint;
            for (var i = 0; i < touches.length; i++) {
                selTouch = touches[i];
                selPoint = selTouch._point;
                selPrePoint = selTouch._prevPoint;
                selPoint.x = (selPoint.x - viewport.x) / scaleX;
                selPoint.y = (selPoint.y - viewport.y) / scaleY;
                selPrePoint.x = (selPrePoint.x - viewport.x) / scaleX;
                selPrePoint.y = (selPrePoint.y - viewport.y) / scaleY;
            }
        };
    },


});