/*
 * Copyright 2009- ECMWF.
 *
 * This software is licensed under the terms of the Apache Licence version 2.0
 * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
 * In applying this licence, ECMWF does not waive the privileges and immunities
 * granted to it by virtue of its status as an intergovernmental organisation
 * nor does it submit to any jurisdiction.
 */

#include "NodeFilterDialog.hpp"

#include <QCloseEvent>
#include <QDebug>
#include <QSettings>

#include "SessionHandler.hpp"
#include "VConfig.hpp"

NodeFilterDialog::NodeFilterDialog(QWidget* parent) : QDialog(parent) {
    setupUi(this);

    // setAttribute(Qt::WA_DeleteOnClose);
    editor_->setFilterMode(true);

    QString wt = windowTitle();
    wt += "  -  " + QString::fromStdString(VConfig::instance()->appLongName());
    setWindowTitle(wt);

    connect(applyPb_, SIGNAL(clicked()), this, SLOT(accept()));

    connect(cancelPb_, SIGNAL(clicked()), this, SLOT(reject()));

    leftVb_->addStretch(1);

    // Read the qt settings
    readSettings();
}

NodeFilterDialog::~NodeFilterDialog() = default;

void NodeFilterDialog::setQuery(NodeQuery* q) {
    editor_->setQuery(q);
}

NodeQuery* NodeFilterDialog::query() const {
    return editor_->query();
}

void NodeFilterDialog::setServerFilter(ServerFilter* sf) {
    editor_->setServerFilter(sf);
}

void NodeFilterDialog::closeEvent(QCloseEvent* event) {
    event->accept();
    writeSettings();
}

void NodeFilterDialog::accept() {
    writeSettings();
    QDialog::accept();
}

void NodeFilterDialog::reject() {
    writeSettings();
    QDialog::reject();
}

//------------------------------------------
// Settings read/write
//------------------------------------------

void NodeFilterDialog::writeSettings() {
    SessionItem* cs = SessionHandler::instance()->current();
    Q_ASSERT(cs);
    QSettings settings(QString::fromStdString(cs->qtSettingsFile("NodeFilterDialog")), QSettings::NativeFormat);

    // We have to clear it so that should not remember all the previous values
    settings.clear();

    settings.beginGroup("main");
    settings.setValue("size", size());
    settings.endGroup();
}

void NodeFilterDialog::readSettings() {
    SessionItem* cs = SessionHandler::instance()->current();
    Q_ASSERT(cs);
    QSettings settings(QString::fromStdString(cs->qtSettingsFile("NodeFilterDialog")), QSettings::NativeFormat);

    settings.beginGroup("main");
    if (settings.contains("size")) {
        resize(settings.value("size").toSize());
    }
    else {
        resize(QSize(590, 460));
    }

    settings.endGroup();
}
