#!/bin/bash
#make by G.R.H

. /mnt/mod/ctrl/configs/key_config &>/dev/null
progdir=$(dirname "$0")

function backup() {
	pkill -f mpv
	[ -f /usr/bin/mpv ] && mpv --really-quiet --image-display-duration=6000 "${progdir}/res/bs1.png" &
	MPATH="mmc"
	if mountpoint -q /mnt/sdcard; then
		MPATH="sdcard"
	fi
	BACKUP_DIR="/mnt/${MPATH}/anbernic/backup"
	BACKUP_FILE="${BACKUP_DIR}/savegame.dat"
	mkdir -p ${BACKUP_DIR}
	[[ -f "${BACKUP_FILE}" ]] && rm -f "${BACKUP_FILE}"
	tar -czf ${BACKUP_FILE} /mnt/mmc/.config/ppsspp/PSP/PPSSPP_STATE/ \
                            /mnt/mmc/.config/ppsspp/PSP/SAVEDATA/ \
                            /mnt/mmc/.pcsx/memcards/ \
                            /mnt/mmc/.pcsx/sstates/ \
                            /mnt/mmc/save/ \
                            /mnt/mmc/openbor/Saves/ \
                            /mnt/mmc/states_RA/ \
                            /mnt/mmc/saves_RA/ \
                            /mnt/mmc/save_nds/ \
                            /mnt/vendor/deep/retro/system/dc/*.bin >/dev/null 2>&1
	sleep 3
	pkill -f mpv
	if [ -f /usr/bin/mpv ]; then
		case $(cat /mnt/vendor/oem/language.ini) in
			0|1)
				/mnt/mod/ctrl/printstr -t 5 -c yellow -s 18 "游戏存档已备份到：\n$BACKUP_FILE"
			;;
			*)
				/mnt/mod/ctrl/printstr -t 5 -c yellow -s 18 "Game save backed up to:\n$BACKUP_FILE"
			;;
		esac
		mpv --really-quiet --image-display-duration=3 "${progdir}/res/done.png"
	fi
}

function restore() {
	pkill -f mpv
	for BACKUP_DIR in sdcard mmc
	do
		if [ -f "/mnt/${BACKUP_DIR}/anbernic/backup/savegame.dat" ]; then
			[ -f /usr/bin/mpv ] && mpv --really-quiet --image-display-duration=3 "${progdir}/res/bs2.png"
			tar -xmzf ${BACKUP_FILE} -C /
			sync
			sleep 1
			[ -f /usr/bin/mpv ] && mpv --really-quiet --image-display-duration=3 "${progdir}/res/done.png"
			exit 0
		fi
	done
	[ -f /usr/bin/mpv ] && mpv --really-quiet --image-display-duration=3 "${progdir}/res/error.png"
}

pkill -f mpv
pkill -f evtest
[ -f /usr/bin/mpv ] && mpv --really-quiet --image-display-duration=6000 "${progdir}/res/bs0.png" &

while true
do
	Test_Button_A
	if [ "$?" -eq "10" ]; then
		restore
		break
	fi
	Test_Button_Y
	if [ "$?" -eq "10" ]; then
		backup
		break
	fi
	Test_Button_FUNC
	if [ "$?" -eq "10" ]; then
		break
	fi
done
pkill -f mpv
pkill -f evtest
exit 0