/* -*-c++-*- */
/* osgEarth - Dynamic map generation toolkit for OpenSceneGraph
 * Copyright 2016 Pelican Mapping
 * http://osgearth.org
 *
 * osgEarth is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */
#ifndef OSGEARTH_WRAPPER_LAYER
#define OSGEARTH_WRAPPER_LAYER 1

#include <osgEarth/Layer>

namespace osgEarth
{
    /** Template to support the Wrapper Layer template
      * @deprecated
      */
    template<typename OPTIONS>
    class WrapperLayerOptions : public LayerOptions
    {
    public:
        WrapperLayerOptions(const ConfigOptions& co = ConfigOptions()) : LayerOptions(co) {
            _data = co;
        }

        Config getConfig() const {
            return _data->getConfig();
        }

        optional<OPTIONS>& data() { return _data; }
        const optional<OPTIONS>& data() const { return _data; }

        optional<OPTIONS> _data;
    };

    /** Template for creating a Map Layer that holds a single serializable resource object. */
    /** @deprecated */
    template<typename OPTIONS>
    class WrapperLayer : public Layer
    {
    public:
        WrapperLayer(const OPTIONS& options) :
            Layer(&_optionsConcrete),
            _options(&_optionsConcrete),
            _optionsConcrete(options)
        {
            setRenderType(RENDERTYPE_NONE);
            Layer::init();
        }

        virtual Config getConfig() const { return options().getConfig(); }

    private:
        OPTIONS* _options;
        OPTIONS  _optionsConcrete;

    protected:
        const OPTIONS& options() const { return *_options; }
        OPTIONS& mutableOptions() { return *_options; }
    };
}

#endif // OSGEARTH_WRAPPER_LAYER
