/* -*-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.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* 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 TILER_TOOL_EXPORTDIALOG
#define TILER_TOOL_EXPORTDIALOG 1

#include "ui_ExportDialog.h"
#include "TMSExporter.h"

#include <osgEarth/GeoData>

namespace PackageQt
{
    class ExportDialog : public QDialog
    {
        Q_OBJECT

    public:
        ExportDialog(osgEarth::MapNode* mapNode, const std::string& dir, const osgEarth::Bounds& bounds);

        std::string getExportPath() const { return _ui.exportPathEdit->text().toUtf8().data(); }

        bool exportEarthFile() const { return _ui.earthFileCheckBox->isChecked(); }
        std::string getEarthFilePath() const { return _ui.earthFilePathEdit->text().toUtf8().data(); }

        bool maxLevelEnabled() const { return _ui.maxLevelCheckBox->isChecked(); }
        int getMaxLevel() const { return _ui.maxLevelCheckBox->isChecked() ? _ui.maxLevelSpinBox->value() : ~0; }

        int getConcurrency() const { return _ui.concurrencySpinBox->value(); }

        bool overwriteExisting() const { return _ui.overwriteCheckBox->isChecked(); }

        bool keepEmpties() const { return _ui.keepEmptiesCheckBox->isChecked(); }

        bool useBounds() const { return _ui.boundsCheckBox->isChecked(); }

        TMSExporter::ProcessingMode getProcessingMode() const
        {          
            if (_ui.rbModeMT->isChecked()) return TMSExporter::MODE_MULTITHREADED;
            if (_ui.rbModeMP->isChecked()) return TMSExporter::MODE_MULTIPROCESS;
            return TMSExporter::MODE_SINGLE;
        }


        private slots:
            void showExportBrowse();
            void updateEarthFilePathEdit();
            void updateMaxLevelSpinBox();
            void validateAndAccept();
            void updateMode(bool checked);
            void maxLevelChanged(int value);
            void concurrencyChanged(int value);

    private:		

        void updateEstimate();
        Ui::ExportDialog _ui;

        void initUi(const std::string& dir);

        osgEarth::Bounds _bounds;
        osg::ref_ptr< osgEarth::MapNode > _mapNode;
    };
}



#endif //TILER_TOOL_EXPORTDIALOG

