/*
 * xSF - Core configuration dialog
 * By Naram Qashat (CyberBotX) [cyberbotx@cyberbotx.com]
 *
 * Partially based on the vio*sf framework
 */

#pragma once

#ifdef __GNUC__
# pragma GCC diagnostic push
# pragma GCC diagnostic ignored "-Wold-style-cast"
#elif defined(__clang__)
# pragma clang diagnostic push
# pragma clang diagnostic ignored "-Wold-style-cast"
#endif
#include <wx/msw/winundef.h>
#include <wx/dialog.h>
#include <wx/string.h>
#ifdef __GNUC__
# pragma GCC diagnostic pop
#elif defined(__clang__)
# pragma clang diagnostic pop
#endif

class wxGridBagSizer;
class wxPanel;
class wxWindow;
class XSFConfig;

class XSFConfigDialog : public wxDialog
{
	inline static const std::string timeRegex = R"(^\d+(:[0-5]\d){0,2}([.,]\d+)?$)";

	wxGridBagSizer *mainSizer;
	XSFConfig &config;
public:
	XSFConfigDialog(XSFConfig &newConfig, wxWindow *parent, const wxString &title);
	void Finalize();

	wxPanel *generalPanel;
	wxGridBagSizer *generalSizer;

	wxPanel *outputPanel;
	wxGridBagSizer *outputSizer;

	bool playInfinitely = false;
	wxString defaultPlayLength;
	wxString defaultFadeoutLength;
	wxString skipSilenceOnStart;
	wxString detectSilence;
	double volume = 1;
	int replayGain;
	int clipProtect;
	int sampleRate;
	wxString titleFormat;
};