#!/bin/bash

echo "Received arguments: $*"

if [[ $1 = "--show-item" ]]; then
	shift
	declare -g -i showItem
	showItem=1
fi

if [[ "$1" =~ ://.*  ]]; then
	if [[ $1 =~ ^file:// ]]; then
		echo "That's a file link!"
		declare -g origReq
		origReq="$(echo ${origReq} | sed 's|file:///|/|g')"
		echo "Decoding path as: ${origReq}"
	else
		echo "Querying the portal..."
		declare schemeSupported
		schemeSupported=$(busctl --user call org.freedesktop.portal.Desktop /org/freedesktop/portal/desktop org.freedesktop.portal.OpenURI SchemeSupported "sa{sv}" "$(echo "${1}" | sed 's|://.*||g')" 0)
		if [[ "${schemeSupported}" =~ false$ ]]; then
			echo "Warning: the link is not supported by this system"
			exit 1
		fi
		busctl \
			--user \
			call \
			org.freedesktop.portal.Desktop \
			/org/freedesktop/portal/desktop \
			org.freedesktop.portal.OpenURI \
			OpenURI \
			"ssa{sv}" \
			'parent_window' "$*" 3 handle_token s 0 writable b false ask b true
		exit $?
	fi
fi

if [[ -e "$1" ]] || [[ -e "$(echo "$1" | sed 's|file:///|/|g')" ]]; then
	echo "Arg1: $1"
	export origReq="$1"
fi

if [[ -e "$*" ]] || [[ -e "$(echo "$*" | sed 's|file:///|/|g')" ]]; then
	echo "Arg2: $*"
	export origReq="$*"
fi

if [ "${trashAppUnsafe}" ]; then
	link="${origReq}"
	xdg-open "${origReq}"
	exit $?
fi

if [[ "${origReq}" =~ "/tmp" ]]; then
	echo "[Info] Detected /tmp!"
	cp \
		-a \
		"${origReq}" \
		~/Shared/
	link="${HOME}/Shared/$(basename "${origReq}")"
elif [[ "${origReq}" =~ ^/run/user ]]; then
	echo "[Info] Detected run path!"
	cp \
		-a \
		"${origReq}" \
		~/Shared/
	link="${HOME}/Shared/$(basename "${origReq}")"
elif [[ "$(dirname "${origReq}")" =~ ^${HOME} ]]; then
	echo "[Info] Detected sandbox home"
	link="${origReq}"
else
	showItem=1
	link="${HOME}/Shared/$(basename "${origReq}")"
	ln \
		-sfr \
		"${origReq}" ~/Shared/
fi

echo "[Info] received a request: $@, translated to ${link}"
echo "[Info] Initiating D-Bus call..."

exec 114< "${link}"

if [[ -d "${link}" ]] || [[ ${showItem} ]]; then
	busctl \
		--user \
		call \
		org.freedesktop.portal.Desktop \
		/org/freedesktop/portal/desktop \
		org.freedesktop.portal.OpenURI \
		OpenDirectory \
		sha{sv} \
		'parent_window' \
		'114' \
		3 handle_token s 0 writable b false ask b true
	if [[ $? = 0 ]]; then
		exit 0
	fi
else
	busctl \
		--user \
		call \
		org.freedesktop.portal.Desktop \
		/org/freedesktop/portal/desktop \
		org.freedesktop.portal.OpenURI \
		OpenFile \
		sha{sv} \
		'parent_window' \
		'114' \
		3 handle_token s 0 writable b false ask b true
	if [[ $? = 0 ]]; then
		exit 0
	fi
fi


if [ -f /usr/bin/dolphin ] && [ ${XDG_CURRENT_DESKTOP} = KDE ]; then
	/usr/bin/dolphin --select "${link}"
elif [ -f /usr/bin/nautilus ] && [ ${XDG_CURRENT_DESKTOP} = GNOME ]; then
	/usr/bin/nautilus $(dirname "${link}")
else
	xdg-open $(dirname "${link}")
fi
