#!/bin/bash

if [ -n "${MAGISK}" ]; then
	ADBCMD=(adb shell su "-c")
else
	ADBCMD=(adb shell su root)
fi

dotar() {
	local SRC="${1}"
	local DST="$(realpath "./${2}")"
	local DIR="${3}"
	shift 3
	local CMD=("${ADBCMD[@]}" tar --exclude='./lost+found' "${@}" --selinux --xattrs --sort=none -cpC "${SRC}" "${DIR}")
	echo " tar cmd: ${CMD[@]}"
	echo "out file: ${DST}"
	"${CMD[@]}" \| base64 |  base64 -d | pv -rb > "${DST}"
}


if [ -n "${1}" ]; then
	if [ "${1}" == "system" ]; then
		EXCLUDED_ROOT=(acct apex cache config data data_mirror dev linkerconfig metadata mnt odm proc product storage sys system_ext vendor)
		EXCLUDES=();
		for f in "${EXCLUDED_ROOT[@]}"; do
			EXCLUDES+=("./${f}/*")
		done
		EXCLUDE_ARG=()
		for f in "${EXCLUDES[@]}"; do
			EXCLUDE_ARG+=("--exclude='${f}'");
		done

		dotar "/" "system.tgz" . "${EXCLUDE_ARG[@]}" -z
	elif [ "${1}" == "magisk" ]; then
		dotar "/" "magisk_v15.2_data_adb.txz" "data/adb" -J
	else
		dotar "/${1}" "${1}.tgz" . -z
	fi
else
	"${ADBCMD[@]}" ls "${MAGISK_PATH}"
fi

