#!/bin/bash

if ! [ $XDG_SESSION_TYPE = tty ]; then
	if [ ${LANG:0:2} = ru ]; then
		zenity --question --text="Сбросить настройки оболочки Гном, а также расширения и автозапуск?" &>/dev/null || exit 0
	else
		zenity --question --text="Reset the Gnome shell settings, as well as extensions and autostart?" &>/dev/null || exit 0
	fi
fi

# Fix bug with cotrol in some apps (set en first)
X11_LANGS="$(localectl status |grep "X11 Layout: " |rev |cut -d" " -f1 |rev)"
# For (unset) bug
[ "$X11_LANGS" = "(unset)" ] && [ "$LANG" = "ru_RU.UTF-8" ] && X11_LANGS="us,ru"
if echo $X11_LANGS |grep -q ru; then
	TMPFILE=$(mktemp)
	cat > $TMPFILE <<EOF
#!/usr/bin/sh
dbus-launch gsettings set org.gnome.desktop.input-sources sources "$(echo "$X11_LANGS" |sed "s/\(us,\|,us$\)//" |sed "s/^/us,/" |sed "s/,/\x27), (\x27xkb\x27, \x27/g" |sed "s/\(.*\)/[(\x27xkb\x27, \x27\1\x27)]/")"
EOF
	chmod +x $TMPFILE
	sh -c $TMPFILE &>/dev/null || :
	rm -f $TMPFILE
fi

# Save wayland langs
WAYLAND_LANGS_TMPFILE=$(mktemp)
cat > $WAYLAND_LANGS_TMPFILE <<EOF
#!/usr/bin/sh
dbus-launch gsettings set org.gnome.desktop.input-sources sources "$(gsettings get org.gnome.desktop.input-sources sources)"
EOF
chmod +x $WAYLAND_LANGS_TMPFILE

# Reset extensions
if [ -d /etc/skel/.local/share/gnome-shell/extensions ]; then
	mkdir -p /home/$USER/.local/share/gnome-shell/extensions-previous
	mv /home/$USER/.local/share/gnome-shell/extensions{,$(date +-previous/%T_%d-%m-%Y |tr : -)}
	# Drop old saves
	find /home/$USER/.local/share/gnome-shell/extensions-previous -maxdepth 1 -type d -name "*-*-*_*-*-*" |sed "s,.*/,," |tr _ - |sort -t "-" -k6.1,6.4n -k5.1,5.2n -k4.1,4.2n -k1.1,1.2n -k2.1,2.2n -k3.1,3.2n |sed "s/-/_/3" |head -n-3 |xargs --verbose -I{} rm -rf "/home/$USER/.local/share/gnome-shell/extensions-previous/{}" &>/dev/null || :
	cp -rf /etc/skel/.local/share/gnome-shell/extensions /home/$USER/.local/share/gnome-shell
	# Reset extensions hard localization
	if ! [ ${LANG:0:2} = ru ]; then
		pushd /home/$USER/.local/share/gnome-shell/extensions
			for PATCH in $(ls /usr/share/gnome-shell-rosa-extensions |grep "hard-ru-translate.patch"); do
				patch -p0 -F3 -R </usr/share/gnome-shell-rosa-extensions/$PATCH || :
			done
		popd
	fi
	chown -R $USER:$USER /home/$USER/.local/share/gnome-shell/extensions*
	# Reset ~/.config/forge
	[ -d /home/$USER/.config/forge/stylesheet/forge ] && [ -f /home/$USER/.local/share/gnome-shell/extensions/forge@jmmaranan.com/stylesheet.css ] && cp -f /home/$USER/.local/share/gnome-shell/extensions/forge@jmmaranan.com/stylesheet.css /home/$USER/.config/forge/stylesheet/forge && chown -R $USER:$USER /home/$USER/.config/forge/stylesheet/forge/stylesheet.css
	[ -d /home/$USER/.config/forge/config ] && [ -f /home/$USER/.local/share/gnome-shell/extensions/forge@jmmaranan.com/config/windows.json ] && cp -f /home/$USER/.local/share/gnome-shell/extensions/forge@jmmaranan.com/config/windows.json /home/$USER/.config/forge/config && chown -R $USER:$USER /home/$USER/.config/forge/config/windows.json
	if [ -d /home/$USER/.config/forge ]; then
		umount -l /home/$USER/.config/forge &>/dev/null || :
		TEMPDIR=$(mktemp -d -t ${USER}XXXFORGE)
		mkdir -p $TEMPDIR/forge_{overlay,work}
		mount -t overlay overlay -o lowerdir=/home/$USER/.config/forge,upperdir=$TEMPDIR/forge_overlay,workdir=$TEMPDIR/forge_work /home/$USER/.config/forge
		chown -R $USER:$USER /home/$USER/.config/forge
	fi

	# For xremap
	[ -d /home/$USER/.local/share/gnome-shell/extensions/xremap@k0kubun.com ] && gpasswd -a $USER input &>/dev/null

	# For authselect-force delete sambashare group bug
	[ -f /usr/share/interfaces/share-dialog.ui ] && gpasswd -a $USER sambashare &>/dev/null
fi

# Reset autostart (desktop icons support)
if [ -d /etc/skel/.config/autostart ]; then
	mkdir -p /home/$USER/.config/autostart-previous
	mv /home/$USER/.config/autostart{,$(date +-previous/%T_%d-%m-%Y |tr : -)}
	# Drop old saves
	find /home/$USER/.config/autostart-previous -maxdepth 1 -type d -name "*-*-*_*-*-*" |sed "s,.*/,," |tr _ - |sort -t "-" -k6.1,6.4n -k5.1,5.2n -k4.1,4.2n -k1.1,1.2n -k2.1,2.2n -k3.1,3.2n |sed "s/-/_/3" |head -n-3 |xargs --verbose -I{} rm -rf "/home/$USER/.config/autostart-previous/{}" &>/dev/null || :
	cp -rf /etc/skel/.config/autostart /home/$USER/.config/
	chown -R $USER:$USER /home/$USER/.config/autostart*
fi

# Reset user's settings
if [ -f /etc/skel/.config/dconf/user ]; then
	umount -l /home/$USER/.config/dconf &>/dev/null || :
	mkdir -p /home/$USER/.config/dconf/
	touch /home/$USER/.config/dconf/user
	mv /home/$USER/.config/dconf/user{,$(date +-%T_%d-%m-%Y |tr : -)}
	# Drop old saves
	find /home/$USER/.config/dconf -maxdepth 1 -type f -name "user-*-*-*_*-*-*" |sed "s,.*user-,," |tr _ - |sort -t "-" -k6.1,6.4n -k5.1,5.2n -k4.1,4.2n -k1.1,1.2n -k2.1,2.2n -k3.1,3.2n |sed "s/-/_/3" |head -n-3 |xargs --verbose -I{} rm -f "/home/$USER/.config/dconf/user-{}" &>/dev/null || :
	# Localization desktop menu groups
	if [ ${LANG:0:2} = ru ]; then
		cp -f /usr/share/gnome-shell-rosa-extensions/user /home/$USER/.config/dconf/user
	else
		cp -f /usr/share/gnome-shell-rosa-extensions/user-en /home/$USER/.config/dconf/user
	fi
	sh -c $WAYLAND_LANGS_TMPFILE &>/dev/null || :
	rm -f $WAYLAND_LANGS_TMPFILE
	chown $USER:$USER /home/$USER/.config/dconf/user*
	TEMPDIR=$(mktemp -d -t ${USER}XXX)
	mkdir -p $TEMPDIR/dconf_{overlay,work}
	mount -t overlay overlay -o lowerdir=/home/$USER/.config/dconf,upperdir=$TEMPDIR/dconf_overlay,workdir=$TEMPDIR/dconf_work /home/$USER/.config/dconf
	chown $USER:$USER /home/$USER/.config/dconf/user*
fi

mkdir -p /home/$USER/.dbus
chown -R $USER:$USER /home/$USER/.dbus

if [ $XDG_SESSION_TYPE = tty ]; then
	if [ ${LANG:0:2} = ru ]; then
		echo -e "Настройки сброшены. Они применятся после перезагрузки.\n\nПредыдущие расширения, автозапуск и бинарные настройки сохранены в\n~/.local/share/gnome-shell/extensions-previous\n~/.config/autostart-previous\n~/.config/dconf"
	else
		echo -e "The settings have been reset. It will be applied after reboot.\n\nPrevious extensions, autostart and binary settings saved to\n~/.local/share/gnome-shell/extensions-previous\n~/.config/autostart-previous\n~/.config/dconf"
	fi
else
	if [ ${LANG:0:2} = ru ]; then
		zenity --question --text="Настройки сброшены. Они применятся после перезагрузки.\n\nПредыдущие расширения, автозапуск и бинарные настройки сохранены в\n~/.local/share/gnome-shell/extensions-previous\n~/.config/autostart-previous\n~/.config/dconf\n\nПерезагрузить компьютер?" &>/dev/null && systemctl reboot || :
	else
		zenity --question --text="The settings have been reset. It will be applied after reboot.\n\nPrevious extensions, autostart and binary settings saved to\n~/.local/share/gnome-shell/extensions-previous\n~/.config/autostart-previous\n~/.config/dconf\n\nReboot PC?" &>/dev/null && systemctl reboot || :
	fi
fi
