#!/bin/sh

# TODO: add support for multiple profiles (custom $DST; always assume --nobacksync)

die() {
	echo $@
	exit 1
}

usage() {
	echo "Usage: ${ME} [--nosync | --nobacksync | --prepare | --clean]"
}

ME=$(basename $0)

case ${ME} in
	ccc*)
		BROWSER_NAME=chromium
		;;
	ggg*)
		BROWSER_NAME=/opt/google/chrome/google-chrome
		;;
	vvv*)
		BROWSER_NAME=vivaldi
		;;
	*)
		die "I do not know my name ${ME}"
		;;
esac

BROWSER=$(basename ${BROWSER_NAME})

[ -z "${HOME}" ] && die "\$HOME environment variable is not set"

SRC="${HOME}/.config/${BROWSER}"
[ -d ${SRC} ] || die "There is no ${BROWSER} configuration directory \"${SRC}\""

DST="/tmp/$(whoami)/${BROWSER}-user-data-dir"
[ -d ${DST} ] || mkdir -p ${DST} || die "Unable to create temporary storage \"${DST}\""

CACHE="/tmp/$(whoami)/.cache/${BROWSER}"
[ -d ${CACHE} ] || mkdir -p ${CACHE} || die "Unable to create browser cache directory \"${CACHE}\""

CACHELINK="${HOME}/.cache/${BROWSER}"
[ -e ${CACHELINK} ] && rm -rf "${CACHELINK}"

ln -s "${CACHE}" "${CACHELINK}"
[ -L ${CACHELINK} ] || die "Unable to create link \"${CACHELINK}\" to browser cache directory \"${CACHE}\""

NOBACKSYNC=""

if [ $# -eq 1 ]; then
	case $1 in
		"--nosync")
			NOBACKSYNC="YES"
			# Do nothing, proceed to start browser
			;;
		"--nobacksync")
			NOBACKSYNC="YES"
			# Fall through
			;;
		"--prepare")
			# Sync from $HOME to $TMPDIR
			rsync -av --delete-after ${SRC}/ ${DST}
			[ -z "${NOBACKSYNC}" ] && exit 0
			;;
		"--clean")
			# Remove $TMPDIR
			rm -rf ${DST}
			exit 0
			;;
		*)
			die $(usage)
			;;
	esac
else
	[ $# -eq 0 ] || die $(usage)
	$0 --prepare
fi

SUFFIXES="-stable"

EXE=$(which "${BROWSER_NAME}" 2>/dev/null)

if [ -n "${EXE}" ]; then
	${EXE} --user-data-dir=${DST}
else
	for SUFFIX in ${SUFFIXES}; do
		EXE=$(which "${BROWSER}${SUFFIX}" 2>/dev/null)
		if [ -n "${EXE}" ]; then
			${EXE} --user-data-dir=${DST}
			break;
		fi
	done
fi

# Delete browser cache even if --no[back]sync was passed
[ -d "${DST}/Default/Cache" ] && rm -rf "${DST}/Default/Cache"
[ -d "${DST}/Default/Code Cache" ] && rm -rf "${DST}/Default/Code Cache"
[ -d "${DST}/Default/GPUCache" ] && rm -rf "${DST}/Default/GPUCache"
[ -d "${DST}/Default/Service Worker/CacheStorage" ] && rm -rf "${DST}/Default/Service Worker/CacheStorage"
[ -d "${DST}/GrShaderCache" ] && rm -rf "${DST}/GrShaderCache"
[ -d "${DST}/ShaderCache" ] && rm -rf "${DST}/ShaderCache"

# Sync back from $TMPDIR to $HOME, if necessary
[ -z "${NOBACKSYNC}" ] && rsync -av --delete-after ${DST}/ ${SRC}

# Delete cache in ${HOME}/.cache/${BROWSER}
# FIXME: since new chrome-based browsers stores cache in $HOME\.cache\$BROWSER, this is not needed anymore.
#[ -d "${HOME}/.cache/${BROWSER}" ] && rm -rf "${HOME}/.cache/${BROWSER}/*"
