#!/bin/bash

# Fix bug with cotrol in some apps (set en first)
if [ ${LANG:0:2} = ru ]; then
	TMPFILE=$(mktemp)
	cat > $TMPFILE <<EOF
#!/usr/bin/sh
dbus-launch gsettings set org.gnome.desktop.input-sources sources "$(localectl status |grep "X11 Layout: " |rev |cut -d" " -f1 |rev |sed "s/\(us,\|,us$\)//" |sed "s/^/us,/" |sed "s/,/\x27), (\x27xkb\x27, \x27/" |sed "s/^/[(\x27xkb\x27, \x27/" |sed "s/$/\x27)]/")"
EOF
	chmod +x $TMPFILE
	sh -c $TMPFILE || :
	rm -f $TMPFILE
fi

# Save wayland langs
WAYLAND_LANGS=$(mktemp)
cat > $WAYLAND_LANGS <<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

# 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 "*-*-*_*-*-*" |sort -r |sed 1,3d |xargs --verbose -I{} rm -rf "{}" &>/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*
	# Bug with forge ~/.config appendix
	[ -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
	# For xremap
	[ -d /home/$USER/.local/share/gnome-shell/extensions/xremap@k0kubun.com ] && gpasswd -a $USER input &>/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 "*-*-*_*-*-*" |sort -r |sed 1,3d |xargs --verbose -I{} rm -rf "{}" &>/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-*-*-*_*-*-*" |sort -r |sed 1,3d |xargs --verbose -I{} rm -f "{}" &>/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 || :
	rm -f $WAYLAND_LANGS
	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
