pragma Singleton

import QtQuick
import Quickshell
import Quickshell.Io
import ZShell
import qs.Config

Singleton {
	id: root

	property alias enabled: props.enabled

	function setHyprConf(): void {
		Hypr.extras.applyOptions({
			"animations.enabled": 0,
			"decoration.shadow.enabled": 0,
			"decoration.blur.enabled": 0,
			"general.border_size": 0,
			"decoration.rounding": 0
		});
	}

	onEnabledChanged: {
		if (enabled) {
			setHyprConf();
			if (Config.utilities.toasts.gameModeChanged)
				Toaster.toast(qsTr("Game mode enabled"), qsTr("Disabled Hyprland animations, blur, shadows and corner radius"), "gamepad");
		} else {
			Hypr.extras.message("reload");
			if (Config.utilities.toasts.gameModeChanged)
				Toaster.toast(qsTr("Game mode disabled"), qsTr("Hyprland settings restored"), "gamepad");
		}
	}

	PersistentProperties {
		id: props

		property bool enabled: Hypr.options.animations.enabled === 0

		reloadableId: "gamemode"
	}

	Connections {
		function onConfigReloaded(): void {
			if (props.enabled)
				root.setHyprConf();
		}

		target: Hypr
	}

	IpcHandler {
		function disable(): void {
			props.enabled = false;
		}

		function enable(): void {
			props.enabled = true;
		}

		function isEnabled(): bool {
			return props.enabled;
		}

		function toggle(): void {
			props.enabled = !props.enabled;
		}

		target: "gameMode"
	}
}
