#!/bin/sh
set -eu

MARKER="/boot/ota/watchdog-playback-stall.env"
CONFIG="/etc/isignage/watchdog-discord.conf"

[ -f "$MARKER" ] || exit 0

config_value() {
	key="$1"
	awk -F= -v key="$key" '
		$1 == key {
			value = substr($0, index($0, "=") + 1)
			gsub(/^[[:space:]]+|[[:space:]]+$/, "", value)
			gsub(/^"|"$/, "", value)
			print value
			exit
		}
	' "$CONFIG" 2>/dev/null || true
}

marker_value() {
	awk -F= -v key="$1" '$1 == key { print substr($0, index($0, "=") + 1); exit }' "$MARKER" 2>/dev/null || true
}

json_escape() {
	printf '%s' "$1" | awk '
		BEGIN { ORS = "" }
		{
			if (NR > 1) printf "\\n"
			gsub(/\\/, "\\\\")
			gsub(/"/, "\\\"")
			gsub(/\r/, "\\r")
			gsub(/\t/, "\\t")
			printf "%s", $0
		}
	'
}

WEBHOOK_URL="$(config_value DISCORD_WEBHOOK_URL)"
[ -n "$WEBHOOK_URL" ] || exit 0

HOSTNAME_VALUE="$(hostname 2>/dev/null || printf unknown)"
MACHINE="$(awk -F= '$1 == "MACHINE" { gsub(/"/, "", $2); print $2; exit }' /etc/os-release 2>/dev/null || true)"
VERSION="$(awk -F= '$1 == "VERSION" { gsub(/"/, "", $2); print $2; exit }' /etc/os-release 2>/dev/null || true)"
REASON="$(marker_value REASON)"
DETECTED_EPOCH="$(marker_value DETECTED_EPOCH)"
BOOT_ID="$(head -n 1 /proc/sys/kernel/random/boot_id 2>/dev/null || true)"
BOOTSTATUS="$(cat /sys/class/watchdog/watchdog0/bootstatus 2>/dev/null || true)"

MESSAGE="iSIGNAGE watchdog reboot detected: device=${HOSTNAME_VALUE} machine=${MACHINE:-unknown} version=${VERSION:-unknown} reason=${REASON:-unknown} detected_epoch=${DETECTED_EPOCH:-unknown} boot_id=${BOOT_ID:-unknown} watchdog_bootstatus=${BOOTSTATUS:-unknown}"
PAYLOAD="{\"content\":\"$(json_escape "$MESSAGE")\"}"

curl --fail --silent --show-error \
	--max-time 20 \
	-H 'Content-Type: application/json' \
	--data "$PAYLOAD" \
	"$WEBHOOK_URL" >/dev/null

rm -f "$MARKER"
sync
