
import PanelCtrl from "../ctrls/panelCtrl";
import SceneCtrl from "../ctrls/sceneCtrl";

/**
 * 添加进舞台的所有层级
 * 仿白鹭的那套
 */
class Layers extends FYGE.Container {
    private _bottomLayer: FYGE.Container;
    private _sceneLayer: FYGE.Container;
    private _popupLayer: FYGE.Container;
    private _toastLayer: FYGE.Container;
    private _topLayer: FYGE.Container;
    private _shareLayer: FYGE.Container;

    // 适配高度
    private _adaptH = 0;

    public get adaptH() {
        return this._adaptH;
    }



    init(stage: FYGE.Stage) {
        stage.addChild(this);
        var arr = [
            "_bottomLayer",
            "_sceneLayer",
            "_popupLayer",
            "_toastLayer",
            "_topLayer",
            "_shareLayer"
        ];
        for (var i = 0; i < arr.length; i++) {
            this[arr[i]] = new FYGE.Container();
            //有些时候，定宽的时候，部分layer置顶，部分居中，再处理
            //为了都置顶和置左，stage的方式永远居中视窗，要么改stage永远左上为00
            // this[arr[i]].y = this.stageOffsetY;
            //如果定宽这里没必要，肯定是0
            // this[arr[i]].x = this.stageOffsetX;//去掉，定高时就居中了
            this.addChild(this[arr[i]]);
        }
        //都以顶部适配
        // this.sceneLayer.y = this.stageOffsetY;
        // this.popupLayer.y = this.stageOffsetY;
        //都以底部适配
        // this.sceneLayer.y = -this.stageOffsetY;
        // this.popupLayer.y = -this.stageOffsetY;
        //这个因为psd弹框不规范
        // this.popupLayer.y -= 420 / 2;

        this.shareLayer.y = -this.stageOffsetY;
        //初始化场景层级
        SceneCtrl.instance.init(this.sceneLayer);
        //初始化弹框层级
        PanelCtrl.instance.init(this.popupLayer);

        this._adaptH = 211 - (this.stageOffsetY / 211) * 211 + this.stageOffsetY;

    }

    /**
     * 底图所在层级，比如统一的背景
     */
    get bottomLayer() { return this._bottomLayer }
    /**
     * 场景
     */
    get sceneLayer() { return this._sceneLayer }
    /**
     * 弹框
     */
    get popupLayer() { return this._popupLayer }
    /**
     * toast所在层级
     */
    get toastLayer() { return this._toastLayer }
    /**
     * 顶层，比如统一标题栏等
     */
    get topLayer() { return this._topLayer }
    /**
     * 分享引导层
     */
    get shareLayer() { return this._shareLayer }
    /**
     * 舞台信息都放在layers里吧
     * 舞台可见高度，初始化后才能使用
     */
    get stageHeight() {
        if (!this.stage) return 0;
        return this.stage.viewRect.height;
    }
    /**
     * 舞台可见宽度
     */
    get stageWidth() {
        if (!this.stage) return 0;
        return this.stage.viewRect.width;
    }
    /**
     * 适配方式x两边偏移的量，固定宽度x为0
     */
    get stageOffsetX() {
        if (!this.stage) return 0;
        return this.stage.viewRect.x;
    }
    get stageOffsetY() {
        if (!this.stage) return 0;
        return this.stage.viewRect.y;
    }
    /**
     * 舞台中心点位置x
     */
    get stageCenterX(): number {
        return this.stage.viewRect.x + this.stage.viewRect.width / 2;
    }
    /**
     * 舞台中心点位置y，layer位置做过偏移的就不对了，所以还是自行算吧
     */
    get stageCenterY(): number {
         return this.stage.viewRect.y + this.stage.viewRect.height / 2;
    }
}

export const layers = new Layers();

//先执行，在淘宝小程序中重新进入会再次初始化
export function destroyLayers() {
    //所有层级移除，init会重新建
    layers.removeChildren();
    //从父级stage移除自己，init会重新加
    if (layers.parent) layers.parent.removeChild(layers)
}
