#!/bin/bash
# vega-update-watchdog
# Recovery script — triggered by OnFailure=vega-update-watchdog.service
# in dakupdate.service when a firmware update fails.
#
# Ensures device remains reachable even if networking was stopped mid-update.
# If a backup package exists, attempts rollback to last known-good firmware.
#
# Log filter:  journalctl -t vega-update-watchdog

BACKUP_DIR="/var/lib/vega/firmware-backup"

log() {
    echo "vega-update-watchdog: $*" | systemd-cat -t vega-update-watchdog -p "${LOG_PRIORITY:-info}"
}

log "Triggered — dakupdate.service failed. Restoring network access."

# ── Restore networking ────────────────────────────────────────────────────────

if ! systemctl is-active --quiet vega-networking.service; then
    log "Starting vega-networking.service..."
    systemctl start vega-networking.service \
        && log "vega-networking.service started successfully." \
        || LOG_PRIORITY=err log "WARNING: Failed to start vega-networking.service. Manual intervention required."
else
    log "vega-networking.service already active."
fi

# ── Rollback to last known-good package ──────────────────────────────────────

BACKUP_DEB=$(ls -1t "$BACKUP_DIR"/*.deb 2>/dev/null | head -1)

if [ -z "$BACKUP_DEB" ]; then
    LOG_PRIORITY=warning log "No backup package found in $BACKUP_DIR. Network restored — manual firmware reinstall required."
    exit 0
fi

log "Reinstalling last known-good package: $BACKUP_DEB"

ROLLBACK_RC=0
dpkg -i "$BACKUP_DEB" || ROLLBACK_RC=$?

if [ "$ROLLBACK_RC" = "0" ]; then
    log "Rollback succeeded. Device should be operational."
else
    LOG_PRIORITY=err log "Rollback FAILED (dpkg exit $ROLLBACK_RC). Network is restored — manual reinstall required."
    exit "$ROLLBACK_RC"
fi
