/*
 * Copyright (C) 2014-2026 CZ.NIC
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 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 General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * In addition, as a special exception, the copyright holders give
 * permission to link the code of portions of this program with the
 * OpenSSL library under certain conditions as described in each
 * individual source file, and distribute linked combinations including
 * the two.
 */

#include <QDesktopServices>
#include <QString>
#include <QUrl>

#include "src/datovka_shared/settings/prefs.h"
#include "src/dimensions/dimensions.h"
#include "src/global.h"
#include "src/gui/dlg_survey.h"
#include "src/settings/prefs_specific.h"
#include "ui_dlg_survey.h"

#define SURVEY_URL "https://www.survio.com/survey/d/U7N3G0D8H4Y0N2G6J"

DlgSurvey::DlgSurvey(QWidget *parent)
    : QDialog(parent),
    m_ui(new (::std::nothrow) Ui::DlgSurvey)
{
	m_ui->setupUi(this);

	m_ui->labelMessage->setText(
	    tr("You are using more than %n databox(es) in the application.", "", SURVEY_BOX_LOWER_LIMIT)
	    + "<br/>"
	    + tr("This year our development team at CZ.NIC wants to focus on making the application better for users with multiple databoxes. We would like to learn what improvements would make the application easier for you to use.")
	    + "<br/>"
	    + tr("We would like to hear about your opinion.")
	    + "<br/><br/><b>"
	    + tr("Please help us by filling out a short survey.")
	    + "</b><br/><br/>");

	m_ui->buttonBox->button(QDialogButtonBox::Yes)->setText(tr("Remind Me Later"));
	m_ui->buttonBox->button(QDialogButtonBox::Discard)->setText(tr("Not Interested"));
	m_ui->buttonBox->button(QDialogButtonBox::Ignore)->setText(tr("Already Filled out"));

	connect(m_ui->fillSurveyPushButton, SIGNAL(clicked()),
	    this, SLOT(openWebPageWithSurvey()));
	connect(m_ui->buttonBox->button(QDialogButtonBox::Yes), SIGNAL(clicked()),
	    this, SLOT(close()));
	connect(m_ui->buttonBox->button(QDialogButtonBox::Discard), SIGNAL(clicked()),
	    this, SLOT(closeAndDoNotDisturbAgain()));
	connect(m_ui->buttonBox->button(QDialogButtonBox::Ignore), SIGNAL(clicked()),
	    this, SLOT(closeAndDoNotDisturbAgain()));
}

DlgSurvey::~DlgSurvey(void)
{
	delete m_ui;
}

void DlgSurvey::view(QWidget *parent)
{
	DlgSurvey dlg(parent);

	const QString dlgName("survey");
	const QSize dfltSize = dlg.size();
	{
		const QSize newSize = Dimensions::dialogueSize(&dlg,
		    PrefsSpecific::dlgSize(*GlobInstcs::prefsPtr, dlgName),
		    dfltSize);
		if (newSize.isValid()) {
			dlg.resize(newSize);
		}
	}

	dlg.exec();

	PrefsSpecific::setDlgSize(*GlobInstcs::prefsPtr, dlgName,
	    dlg.size(), dfltSize);
}

void DlgSurvey::openWebPageWithSurvey(void)
{
	QDesktopServices::openUrl(QUrl(SURVEY_URL, QUrl::TolerantMode));
}

void DlgSurvey::closeAndDoNotDisturbAgain(void)
{
	GlobInstcs::prefsPtr->setBoolVal("window.main.on.start.survey.202603.do_dot_show", true);
	close();
}
