#!/bin/sh
set -eu

OTA_DIR="/boot/ota"
REPORT_DIR="$OTA_DIR/report"

[ -f "$REPORT_DIR/failed-root" ] || exit 0
[ -f "$REPORT_DIR/rolled-back-to" ] || exit 0

DEVICE_ID="$(tr -d '\0' < /sys/firmware/devicetree/base/serial-number 2>/dev/null || cat /etc/machine-id)"
DEVICE_ID="$(echo "$DEVICE_ID" | tr '[:lower:]' '[:upper:]')"

VERSION="$(awk -F= '$1=="VERSION"{gsub(/"/,"",$2); print $2}' /etc/os-release 2>/dev/null || true)"
MACHINE="$(awk -F= '$1=="MACHINE"{gsub(/"/,"",$2); print $2}' /etc/os-release 2>/dev/null || true)"

read_file() {
	[ -f "$1" ] && cat "$1" || true
}

FAILED_ROOT="$(read_file "$REPORT_DIR/failed-root")"
ROLLED_BACK_TO="$(read_file "$REPORT_DIR/rolled-back-to")"
REASON="$(read_file "$REPORT_DIR/reason")"
DETECTED_AT="$(read_file "$REPORT_DIR/rollback-detected-at")"

BOOT_ATTEMPTS="$(read_file "$REPORT_DIR/boot-attempts")"
AUTOREPAIR_RESULT="$(read_file "$REPORT_DIR/autorepair-result")"
AUTOREPAIR_REASON="$(read_file "$REPORT_DIR/autorepair-reason")"
REPAIRED_ROOT="$(read_file "$REPORT_DIR/repaired-root")"

case "$BOOT_ATTEMPTS" in
	''|*[!0-9]*) BOOT_ATTEMPTS=0 ;;
esac

curl -fsS -X POST "https://api.isignage.uk/devices/${DEVICE_ID}/ota/rollback" \
	-H "Content-Type: application/json" \
	-H "User-Agent: iSIGNAGE" \
	-d "{
		\"device\":\"${DEVICE_ID}\",
		\"event\":\"ota_rollback\",
		\"failed_root\":\"${FAILED_ROOT}\",
		\"rolled_back_to\":\"${ROLLED_BACK_TO}\",
		\"current_version\":\"${VERSION}\",
		\"machine\":\"${MACHINE}\",
		\"reason\":\"${REASON}\",
		\"boot_attempts\":${BOOT_ATTEMPTS},
		\"autorepair_result\":\"${AUTOREPAIR_RESULT}\",
		\"autorepair_reason\":\"${AUTOREPAIR_REASON}\",
		\"repaired_root\":\"${REPAIRED_ROOT}\",
		\"detected_at\":\"${DETECTED_AT}\"
	}"

rm -rf "$REPORT_DIR"

exit 0
