/**
 * @typedef {import('./ref-manager.js').RefManager} RefManager
 */

/**
 * Контроль за одним интерактивным целевым слоем.
 * 
 * @class SingleLayerManager
 * @property {ol.layer.Vector} layer - тот самый single слой
 */
class SingleLayerManager {
    /**
     * @param {ol.layer.Vector } layer - ol-слой
     */
    constructor (layer) {
        recovery(self => {
            /** Инъекция слоя */
            if(layer instanceof ol.layer.Vector || layer instanceof ol.layer.VectorImage)
                self.layer = layer
            else 
                throw new Error("Несоответствующий тип у слоя-аргумента")
        }, (...e) => {
            console.log("Ошибка инициализии SingleLayerManager");
            e.forEach(er => {throw er});
        })(this)
    }

    /**
     * Меняет источник целевого слоя.
     * @method
     * @param {object} json - необработанный json
     */
    set = recovery(
        json => {
            const features = new ol.format.GeoJSON().readFeatures(json, {
                featureProjection: 'EPSG:3857'
            })
            this.layer.getSource().clear()
            this.layer.getSource().addFeatures(features)
        }, 
        (...e) => {
            console.log("Ошибка изменения слоя (singleLayerManager.set)");
            e.forEach(er => {throw er});
        }
    )

    /** 
     * Очистка и удаление самого менеджера
     * @method
     */
    exit = recovery(
        () => {
            this.layer = null
        },
        (...e) => {
            console.log("Ошибка изменения слоя (singleLayerManager.set)");
            e.forEach(er => {throw er});
        }
    )

}