# src/toolbar/ShowSpacesMode.js

    import {Controller} from "../Controller.js";

    /** @private */
    class ShowSpacesMode extends Controller {

        constructor(parent, cfg) {

            super(parent, cfg);

            if (!cfg.buttonElement) {
                throw "Missing config: buttonElement";
            }

            this._buttonElement = cfg.buttonElement;

            this.on("enabled", (enabled) => {
                if (!enabled) {
                    this._buttonElement.classList.add("disabled");
                } else {
                    this._buttonElement.classList.remove("disabled");
                }
            });

            this._buttonElement.addEventListener("click", (event) => {
                if (this.getEnabled()) {
                    this.setActive(!this.getActive(), () => {
                    });
                }
                event.preventDefault();
            });

            this.bimViewer.on("reset", () => {
                this.setActive(false); // IfcSpaces hidden by default
            });

            this.viewer.scene.on("modelLoaded", (modelId) => {
                if (!this._active) {
                    const objectIds = this.viewer.metaScene.getObjectIDsByType("IfcSpace");
                    this.viewer.scene.setObjectsCulled(objectIds, true);
                }
            });

            this._active = false;
            this._buttonElement.classList.remove("active");
        }

        setActive(active) {
            if (this._active === active) {
                return;
            }
            this._active = active;
            if (active) {
                this._buttonElement.classList.add("active");
                this._enterShowSpacesMode();
                this.fire("active", this._active);
            } else {
                this._buttonElement.classList.remove("active");
                this._exitShowSpacesMode();
                this.fire("active", this._active);
            }
        }

        _enterShowSpacesMode() {
            const viewer = this.viewer;
            const scene = viewer.scene;
            const metaScene = viewer.metaScene;
            const objectIds = metaScene.getObjectIDsByType("IfcSpace");
            scene.setObjectsCulled(objectIds, false);
        }

        _exitShowSpacesMode() {
            const viewer = this.viewer;
            const scene = viewer.scene;
            const metaScene = viewer.metaScene;
            const objectIds = metaScene.getObjectIDsByType("IfcSpace");
            scene.setObjectsCulled(objectIds, true);
        }
    }

    export {ShowSpacesMode};