const HomeApi = require("../net/HomeApi");
const GameModule = require("../utils/GameModule");
const { GameNotificationKey } = require("../utils/GameEnum")
cc.Class({
    extends: cc.Component,

    properties: {

        scrollView: cc.ScrollView,

        levelHomeItem: cc.Prefab,

        levelHomeTop: cc.Prefab,

        levelHomeBottom: cc.Prefab,

        minContentPosition: -150,

    },

    /**
     * home 初始化方法, 所有的初始化操作在这里操作, 必须在加入父节点之前调用
     * */
    init(uid, cityId) {

        this.uid = uid;
        this.cityId = cityId;

        this.buildingInfos = [];

        this.node.parent = cc.find("Canvas/game");

        this.refreshTheme();
        this.getNetworkData();
    },

    refreshTheme() {
        
        if (this.buildings) {
            for (let i = 0; i < this.buildings.length; i++) {
                let itemScript = this.buildings[i];
                itemScript.init(this.cityId, i + 1);
            }
        }

        if (this.bottomScript) {
            this.bottomScript.init(this.cityId);
        }
    },

    // LIFE-CYCLE CALLBACKS:
    onLoad() {

        this.buildings = [];

        this.matchScreenSize();

        let topNode = cc.instantiate(this.levelHomeTop);
        this.scrollView.content.addChild(topNode);

        for (let i = 0; i < 5; i++) {
            let item = cc.instantiate(this.levelHomeItem);
            let itemScript = item.getComponent('LevelHomeItem');
            itemScript.init(this.cityId, i + 1);
            this.scrollView.content.addChild(item);
            this.buildings.push(itemScript);
        }

        let bottomNode = cc.instantiate(this.levelHomeBottom);
        this.bottomScript = bottomNode.getComponent('LevelHomeBottom'); this.bottomScript.init(this.cityId);
        this.scrollView.content.addChild(bottomNode);

        this.scrollView.node.on("scrolling", (event) => {

            if (this.scrollView._isOutOfBoundary()) {

                if (this.scrollView._outOfBoundaryAmount.y > 0) { // 超出上面的界限

                    this.scrollView._outOfBoundaryAmount.y = 0;
                    this.scrollView._adjustContentOutOfBoundary();

                } else {  // 超出下面的界限

                    if (this.scrollView._outOfBoundaryAmount.y < this.minContentPosition) {

                        if (this.recordScrollViewPosition) {
                            this.scrollView.content.setPosition(this.recordScrollViewPosition);
                            return;
                        } else {
                            this.recordScrollViewPosition = this.scrollView.getContentPosition();
                        }

                    } else {
                        this.recordScrollViewPosition = null;
                    }
                }
            }

        }, this);
    },

    /**
     * 适配不同高度的屏幕尺寸
     */
    matchScreenSize() {
        let initHeight = 1624;
        let vsize = cc.view.getVisibleSize()
        let paddingY = (initHeight - vsize.height) / 2;

        if (paddingY < 0) {
            paddingY = 0;
        }
        this.scrollView.content.getComponent(cc.Layout).paddingTop = paddingY;

        // 底部加多一块100px的内边距, 让底楼不要完全显示出来
        this.scrollView.content.getComponent(cc.Layout).paddingBottom = paddingY - 100;
    },

    // 用来访问自己家园时, 重置scrollView位置
    start() {
        this.scrollView.scrollToBottom(0.0);
    },

    // 用来访问好友家园时, 重置scrollView位置
    onEnable() {

    },

    getNetworkData(callback) {
        // 获取目标用户的建筑
        HomeApi.getUserBuildings(this.uid, this.cityId, (responseData) => {
            
            let sortArray = responseData.buildings.sort((a, b) => {
                return a.buildingId < b.buildingId;
            });
            sortArray.map((value, index, array) => {
                let model = Global.BuildingManager.getBuildingInfo(this.cityId, value.buildingId, value.level)
                if (model.isFull() && this.cityId === Global.cityId) {
                    try {
                        GameEvent.fire(GameNotificationKey.LevelHomeItemBuildingFull);    
                    } catch (error) {
                        console.log(error);
                    }
                }
                model.coinCount = value.coinCount;
                model.artists = value.artists || [];
                
                this.buildingInfos.push(model);
            });

            GameModule.userInfo.setUserInfo(responseData.user);
            GameModule.userInfo.setGrossIncomeAndStars(responseData.grossIncome, responseData.stars);

            callback && callback();

            // 开始设置建筑
            this.configBuildings();

        }, (error) => {
            console.log("error: " + error);
        });
    },

    configBuildings() {
        
        for (let i = 0; i < this.buildings.length; i++) {
            let itemScript = this.buildings[i];
            itemScript.config(this.buildingInfos[i], this.uid);
        }
    },

});
