#!/usr/bin/env bash
shopt -s nullglob

# Defaults for XDG
if ! [[ "$XDG_RUNTIME_DIR" ]]; then
	XDG_RUNTIME_DIR="/run/user/$UID"
fi

# Defaults
cfg_workdir="$XDG_RUNTIME_DIR/ufwd"
cfg_scan_delay='30'

msg() { printf '%s\n' "$*"; }
err() { echo "$*" >&2; }

usage() {
	printf 'Usage: ufwd [-hn] [-d workdir] -D [check delay]\n'
	printf '   -h            # Show this message.\n'
	printf '   -n            # Enable notifications with notify-send. Must be installed.\n'
	printf '   -d [path]     # Set the dir that is to be watched.\n'
	printf '   -D [sec]      # Set the check interval.\n'
}

main() {
	while (( $# )); do
		case "$1" in
			(--help|-h) usage; return 0;;

			(--workdir|-d) cfg_workdir="$2"; shift;;
			(--scan-delay|-D) cfg_scan_delay="$2"; shift;;

			(--notify|-n) flag_enable_notifications=1;;

			(--) shift; break;;
			(-*)
				err "Unknown key: $1"
				usage
				return 1
			;;

			(*) break;;
		esac
		shift
	done

	if (( flag_enable_notifications )); then
		if type -P notify-send &>/dev/null; then
			msg "Found notify-send."
		else
			err "notify-send not found in PATH, disabling notifications."
			flag_enable_notifications=0
		fi
	fi

	mkdir -p "$cfg_workdir" || {
		return 1
	}

	cd "$cfg_workdir" || {
		return 1
	}

	while sleep "$cfg_scan_delay"; do
		for i in *; do
			upload_output=$( ufw "$@" -R "$i" )
			upload_return=$?

			if (( flag_enable_notifications )); then
				if (( $upload_return )); then
					notify-send 'ufwd' "File upload failed: $upload_output"
				else
					notify-send 'ufwd' "File uploaded: $upload_output"
				fi
			fi

			printf '%s\n' "$upload_output"
		done
	done
}

main "$@"