#!/usr/bin/bash
# set -x

escape() {
	sed 's/[&/\]/\\&/g' <<< "$1"
}
die() {
	echo "$@" >&2
	exit 1
}

get_config() {
	MOTD_CONFIG_FILE="${MOTD_CONFIG_FILE:-/etc/ublue-os/motd.json}"
	QUERY="$1"
	FALLBACK="$2"
	shift
	shift
	OUTPUT="$(jq -r "$QUERY" "$MOTD_CONFIG_FILE" 2>/dev/null || echo "$FALLBACK")"
	if [ "$OUTPUT" == "null" ] ; then
		echo "$FALLBACK"
		return
	fi
	echo "$OUTPUT"
}

# Put all the configuration-specific variables here so that we can define exactly what is going to be on the config easier by just reading this section
TIP_DIRECTORY="$(get_config '."tips-directory"' "/usr/share/ublue-os/motd/tips")"
CHECK_OUTDATED="$(get_config '."check-outdated"' "true")"
IMAGE_INFO="$(get_config '."image-info-file"' "/usr/share/ublue-os/image-info.json")"
DEFAULT_THEME="$(get_config '."default-theme"' "slate")"
TEMPLATE_FILE="$(get_config '."template-file"' "/usr/share/ublue-os/motd/template.md")"
THEMES_DIRECTORY="$(get_config '."themes-directory"' "/usr/share/ublue-os/motd/themes")"
# HOOKS_DIRECTORY="$(get_config '."hooks-directory"' "/usr/share/ublue-os/motd/hooks.d")"
[ ! -f "$TEMPLATE_FILE" ] && die "Failed reading template file"

if [ "$CHECK_OUTDATED" == "true" ] ; then
	IMAGE_DATE_SECONDS=$(rpm-ostree status --booted --json | jq -r '.deployments[].timestamp')
	CURRENT_SECONDS=$(date +%s)
	DIFFERENCE=$((CURRENT_SECONDS - IMAGE_DATE_SECONDS))
	ONE_MONTH=$((30 * 24 * 60 * 60))
	if [ "$DIFFERENCE" -ge "$ONE_MONTH" ]; then
		#shellcheck disable=2016
		TIP='# 󰇻 Your current image is over 1 month old, run `ujust update`'
	fi
fi

TIP="${TIP:-"$(/usr/bin/cat "$TIP_DIRECTORY"/*.md 2>/dev/null | shuf -n 1)"}"
TIP_ESCAPED="󰋼 $(escape "$TIP")"

KEY_WARN_FILE="/run/user-motd-sbkey-warn.md"
[ -e $KEY_WARN_FILE ] && KEY_WARN="**WARNING**: $(cat $KEY_WARN_FILE)"
KEY_WARN_ESCAPED=$(escape "$KEY_WARN")

THEME=$(dconf read /org/gnome/desktop/interface/accent-color 2>/dev/null || echo -e "$DEFAULT_THEME")
# Dconf will fail if the accent-color has not been changed yet
if [ "$THEME" == "" ] ; then
	# Gsettings will not update if the system's schemas have not been configured properly
	THEME=$(gsettings get org.gnome.desktop.interface accent-color 2>/dev/null || echo -e "$DEFAULT_THEME")
fi
THEME=${THEME//\'/}
THEME=${MOTD_FORCE_THEME:-$THEME}

IMAGE_NAME_ESCAPED="$(escape "$(jq -r '."image-name"' "$IMAGE_INFO")")"
IMAGE_TAG_ESCAPED="$(escape "$(jq -r '."image-tag"' "$IMAGE_INFO")")"

sed -e "s/%IMAGE_NAME%/$IMAGE_NAME_ESCAPED/g" \
	-e "s/%IMAGE_TAG%/$IMAGE_TAG_ESCAPED/g" \
	-e "s/%TIP%/$TIP_ESCAPED/g" \
	-e "s/%KEY_WARN%/$KEY_WARN_ESCAPED/g" \
	"$TEMPLATE_FILE" | tr '~' '\n' | /usr/bin/glow -s "${THEMES_DIRECTORY}/${THEME}.json" -w 78 -
