cc.Class({
    extends: cc.Component,

    properties: {
        itemTemplate: { // item template to instantiate other items
            default: null,
            type: cc.Node
        },
        scrollView: {
        	default: null,
        	type: cc.ScrollView
        },
        spawnCount: 0, // how many items we actually spawn
        totalCount: 0, // how many items we need for the whole list
        spacing: 0, // space between each item
        bufferZone: 0, // when item is away from bufferZone, we relocate it
        lblScrollEvent: cc.Label,
        btnAddItem: cc.Button,
        btnRemoveItem: cc.Button,
        btnJumpToPosition: cc.Button,
        lblJumpPosition: cc.Label,
        lblTotalItems: cc.Label,
        totalRankUrl:"",
        timeline:"0",
        count:10,
        // item:[],
        ver:100,
        os:1,
        channel:"wexin",
        hasNext:true,
    },

    // use this for initialization
    onLoad: function () {
        this.content = this.scrollView.content;
        // console.log(this.items);
        this.updateTimer = 0;
        this.updateInterval = 0.2;
        this.lastContentPosY = 0; // use this variable to detect if we are scrolling up or down
    },

    onEnable:function(){
        if(this.items!=undefined){
            this.items.clear();
        }else{
            this.items = [];
        }
        this.getSystemInfo();
    },

    getUserInfo:function(){
        wx.getStorage({
            key:"userInfo",
            success:(res)=>{
                this.getTotalRank(res.data);
            }
        })
    },

    getSystemInfo:function(){
        if(wx!=undefined){
            wx.getSystemInfo({
                success:(res)=>{
                    this.os = res.platform=="android"?2:1;
                    this.getUserInfo();
                }
            })
        }
    },

    getTotalRank:function(userInfo){
        console.log(userInfo.token)
        console.log(userInfo.uid)
        if(wx!=undefined){
            var self = this;
            console.log("去网络数据");
            if(this.hasNext){
                wx.request({
                    url:self.totalRankUrl,
                    data:{
                        token:userInfo.token,
                        uid:userInfo.uid,
                        channel:self.channel,
                        os:self.os,
                        ver:self.ver,
                        timeline:self.timeline,
                        count:self.count
                    },
                    success:(response)=>{
                        console.log(response);
                        var data =response.data.data;
                        if(data!=undefined){
                            console.log(this.users);
                             console.log(data);
                            this.timeline = data.timeline;
                            this.hasNext = data.next>0;
                            this.users = data.users;
                            // this.users.concat(data.users);
                            this.initialize(data.users);   
                        }
                    },
                    fail:()=>{
                        wx.showToast({
                            title:"网络请求出错",
                        })
                    }
                })
            }else{
                wx.showToast({
                    title:"没有更多了～"
                })
            }
        }
    },

    initialize: function () {
        this.content.height = this.totalCount * (this.itemTemplate.height + this.spacing) + this.spacing; // get total content height
    	for (let i = 0; i < this.spawnCount; ++i) { // spawn items, we only need to do this once
    		let item = cc.instantiate(this.itemTemplate);
    		this.content.addChild(item);
    		item.setPosition(0, -item.height * (0.5 + i) - this.spacing * (i + 1));
    		item.getComponent('Item').updateItem(this.users);
            this.items.push(item);
    	}
    },

    getPositionInView: function (item) { // get item position in scrollview's node space
        let worldPos = item.parent.convertToWorldSpaceAR(item.position);
        let viewPos = this.scrollView.node.convertToNodeSpaceAR(worldPos);
        return viewPos;
    },

    update: function(dt) {
        this.updateTimer += dt;
        if (this.updateTimer < this.updateInterval) return; // we don't need to do the math every frame
        this.updateTimer = 0;
        let items = this.items;
        let buffer = this.bufferZone;
        let isDown = this.scrollView.content.y < this.lastContentPosY; // scrolling direction
        let offset = (this.itemTemplate.height + this.spacing) * items.length;
        for (let i = 0; i < items.length; ++i) {
            let viewPos = this.getPositionInView(items[i]);
            if (isDown) {
                // if away from buffer zone and not reaching top of content
                if (viewPos.y < -buffer && items[i].y + offset < 0) {
                    items[i].setPositionY(items[i].y + offset );
                    let item = items[i].getComponent('Item');
                    item.updateItem(this.users[i]);
                }
            } else {
                // if away from buffer zone and not reaching bottom of content
                if (viewPos.y > buffer && items[i].y - offset > -this.content.height) {
                    items[i].setPositionY(items[i].y - offset );
                    let item = items[i].getComponent('Item');
                    item.updateItem(this.users[i]);
                }
            }
        }
        // update lastContentPosY
        this.lastContentPosY = this.scrollView.content.y;
        // this.lblTotalItems.textKey = "Total Items: " + this.totalCount;
    },

    scrollEvent: function(sender, event) {
        switch(event) {
            case 0: 
               this.lblScrollEvent.string = "Scroll to Top"; 
               break;
            case 1: 
               this.lblScrollEvent.string = "Scroll to Bottom"; 

               break;
            case 2: 
               this.lblScrollEvent.string = "Scroll to Left"; 
               break;
            case 3: 
               this.lblScrollEvent.string = "Scroll to Right"; 
               break;
            case 4: 
               this.lblScrollEvent.string = "Scrolling"; 
               break;
            case 5: 
               this.lblScrollEvent.string = "Bounce Top"; 
               break;
            case 6: 
               this.lblScrollEvent.string = "Bounce bottom"; 
               break;
            case 7: 
               this.lblScrollEvent.string = "Bounce left"; 
               break;
            case 8: 
               this.lblScrollEvent.string = "Bounce right"; 
               break;
            case 9: 
               this.lblScrollEvent.string = "Auto scroll ended"; 
               break;
        }
    },

    addItem: function() {
        this.content.height = (this.totalCount + 1) * (this.itemTemplate.height + this.spacing) + this.spacing; // get total content height
        this.totalCount = this.totalCount + 1;
    },

    removeItem: function() {
        if (this.totalCount - 1 < 30) {
            cc.error("can't remove item less than 30!");
            return;
        }

        this.content.height = (this.totalCount - 1) * (this.itemTemplate.height + this.spacing) + this.spacing; // get total content height
        this.totalCount = this.totalCount - 1;
    },

    scrollToFixedPosition: function () {
        this.scrollView.scrollToOffset(cc.p(0, 500), 2);
    }
});
