// SPDX-License-Identifier: GPL-2.0
#include "qPrefTechnicalDetails.h"
#include "qPrefPrivate.h"
#include "core/deco.h"

static const QString group = QStringLiteral("TecDetails");

qPrefTechnicalDetails::qPrefTechnicalDetails(QObject *parent) : QObject(parent)
{
}

qPrefTechnicalDetails *qPrefTechnicalDetails::instance()
{
	static qPrefTechnicalDetails *self = new qPrefTechnicalDetails;
	return self;
}


void qPrefTechnicalDetails::loadSync(bool doSync)
{
	disk_calcalltissues(doSync);
	disk_calcceiling(doSync);
	disk_calcceiling3m(doSync);
	disk_calcndltts(doSync);
	disk_dcceiling(doSync);
	disk_display_deco_mode(doSync);
	disk_display_unused_tanks(doSync);
	disk_ead(doSync);
	disk_gfhigh(doSync);
	disk_gflow(doSync);
	disk_gf_low_at_maxdepth(doSync);
	disk_hrgraph(doSync);
	disk_mod(doSync);
	disk_modpO2(doSync);
	disk_percentagegraph(doSync);
	disk_redceiling(doSync);
	disk_rulergraph(doSync);
	disk_show_average_depth(doSync);
	disk_show_ccr_sensors(doSync);
	disk_show_ccr_setpoint(doSync);
	disk_show_icd(doSync);
	disk_show_pictures_in_profile(doSync);
	disk_show_sac(doSync);
	disk_show_scr_ocpo2(doSync);
	disk_tankbar(doSync);
	disk_vpmb_conservatism(doSync);
	disk_zoomed_plot(doSync);
}

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "calcalltissues", calcalltissues);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "calcceiling", calcceiling);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "calcceiling3m", calcceiling3m);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "calcndltts", calcndltts);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "decoinfo", decoinfo);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "dcceiling", dcceiling);

HANDLE_PREFERENCE_ENUM(TechnicalDetails, deco_mode, "display_deco_mode", display_deco_mode);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "display_unused_tanks", display_unused_tanks);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "ead", ead);

void qPrefTechnicalDetails::set_gfhigh(int value)
{
	if (value != prefs.gfhigh) {
		prefs.gfhigh = value;
		disk_gfhigh(true);
		emit instance()->gfhighChanged(value);
	}
}

void qPrefTechnicalDetails::disk_gfhigh(bool doSync)
{
	if (doSync) {
		if (prefs.gfhigh)
			qPrefPrivate::propSetValue(keyFromGroupAndName(group, "gfhigh"), prefs.gfhigh, default_prefs.gfhigh);
	} else {
		prefs.gfhigh = qPrefPrivate::propValue(keyFromGroupAndName(group, "gfhigh"), default_prefs.gfhigh).toInt();
		set_gf(-1, prefs.gfhigh);
	}
}

void qPrefTechnicalDetails::set_gflow(int value)
{
	if (value != prefs.gflow) {
		prefs.gflow = value;
		disk_gflow(true);
		emit instance()->gflowChanged(value);
	}
}

void qPrefTechnicalDetails::disk_gflow(bool doSync)
{
	if (doSync) {
		if (prefs.gflow)
			qPrefPrivate::propSetValue(keyFromGroupAndName(group, "gflow"), prefs.gflow, default_prefs.gflow);
	} else {
		prefs.gflow = qPrefPrivate::propValue(keyFromGroupAndName(group, "gflow"), default_prefs.gflow).toInt();
		set_gf(prefs.gflow, -1);
	}
}

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "gf_low_at_maxdepth", gf_low_at_maxdepth);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "hrgraph", hrgraph);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "mod", mod);

HANDLE_PREFERENCE_DOUBLE(TechnicalDetails, "modpO2", modpO2);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "percentagegraph", percentagegraph);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "redceiling", redceiling);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "RulerBar", rulergraph);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "show_average_depth", show_average_depth);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "show_ccr_sensors", show_ccr_sensors);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "show_ccr_setpoint", show_ccr_setpoint);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "show_icd", show_icd);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "show_pictures_in_profile", show_pictures_in_profile);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "show_sac", show_sac);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "show_scr_ocpo2", show_scr_ocpo2);

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "tankbar", tankbar);

void qPrefTechnicalDetails::set_vpmb_conservatism(int value)
{
	if (value != prefs.vpmb_conservatism) {
		prefs.vpmb_conservatism = value;
		disk_vpmb_conservatism(true);
		emit instance()->vpmb_conservatismChanged(value);
	}
}

void qPrefTechnicalDetails::disk_vpmb_conservatism(bool doSync)
{
	if (doSync) {
		if (prefs.vpmb_conservatism)
			qPrefPrivate::propSetValue(keyFromGroupAndName(group, "vpmb_conservatism"), prefs.vpmb_conservatism, default_prefs.vpmb_conservatism);
	} else {
		prefs.vpmb_conservatism = qPrefPrivate::propValue(keyFromGroupAndName(group, "vpmb_conservatism"), default_prefs.vpmb_conservatism).toInt();
		set_vpmb_conservatism(prefs.vpmb_conservatism);
	}
}

HANDLE_PREFERENCE_BOOL(TechnicalDetails, "zoomed_plot", zoomed_plot);
