#!/bin/bash
# Watchdog for watter-collector upgrades.
# Ensures collectd restarts successfully after package upgrade.
# If collectd fails to restart, forces all GPIO outputs inactive.

set -e

STATE_FILE="/run/watter-collector-state"
MARKER_FILE="/run/watter-collector-upgrade"

GPIO_OUTPUTS=(
    "pc-power-button"
    "pc-contactor"
    "heat-element"
    "water-pump"
    "coolant-pump"
    "valve-actuate"
)

cleanup_files() {
    rm -f "$STATE_FILE" "$MARKER_FILE"
}

force_gpios_inactive() {
    echo "Forcing all GPIO outputs inactive"
    for line in "${GPIO_OUTPUTS[@]}"; do
        gpioset --by-name "$line"=0 2>/dev/null || true
    done
}

# Phase 1: Wait for collectd to start (up to 120s)
echo "Waiting for collectd to start..."
started=false
for i in $(seq 1 60); do
    if systemctl is-active --quiet collectd.service; then
        started=true
        break
    fi
    sleep 2
done

if [ "$started" != "true" ]; then
    echo "collectd failed to start within 120s"
    force_gpios_inactive
    cleanup_files
    exit 1
fi

# Phase 2: Monitor stability (30s)
echo "Monitoring collectd stability..."
stable=true
for i in $(seq 1 6); do
    sleep 5
    if ! systemctl is-active --quiet collectd.service; then
        stable=false
        break
    fi
done

if [ "$stable" != "true" ]; then
    echo "collectd became unstable after restart"
    force_gpios_inactive
    cleanup_files
    exit 1
fi

echo "collectd restarted successfully"
cleanup_files
exit 0
