/******************************************************************************
    Note: Long-term goal is to remove this tab / file.
    Most functionality shall be moved to the Macro tab instead.

    So if you plan to make changes here, please consider applying them to the
    corresponding macro tab functionality instead.
******************************************************************************/
#pragma once
#include "switch-generic.hpp"

namespace advss {

enum class PauseType {
	Scene,
	Window,
};

enum class PauseTarget {
	All,
	Transition,
	Window,
	Executable,
	Region,
	Media,
	File,
	Random,
	Time,
	Idle,
	Sequence,
	Audio,
	Video,
};

struct PauseEntry : SceneSwitcherEntry {
	PauseType pauseType = PauseType::Scene;
	PauseTarget pauseTarget = PauseTarget::All;
	std::string window = "";

	const char *getType() { return "pause"; }
	bool valid();

	inline PauseEntry(){};
	inline PauseEntry(OBSWeakSource scene_, PauseType pauseType_,
			  PauseTarget pauseTarget_, const std::string &window_)
		: SceneSwitcherEntry(scene_, nullptr),
		  pauseType(pauseType_),
		  pauseTarget(pauseTarget_),
		  window(window_)
	{
	}
};

class PauseEntryWidget : public SwitchWidget {
	Q_OBJECT

public:
	PauseEntryWidget(QWidget *parent, PauseEntry *s);
	PauseEntry *getSwitchData();
	void setSwitchData(PauseEntry *s);

	static void swapSwitchData(PauseEntryWidget *s1, PauseEntryWidget *s2);

private slots:
	void PauseTypeChanged(int index);
	void PauseTargetChanged(int index);
	void WindowChanged(const QString &text);

private:
	QComboBox *pauseTypes;
	QComboBox *pauseTargets;
	QComboBox *windows;

	PauseEntry *switchData;
};

} // namespace advss
