#!/usr/bin/env bash
# ==============================================================================
# /usr/local/bin/wifi-watchdog.sh
# Resilient Liveness Watchdog with Tiered Fallback & Rate Limiting
# ==============================================================================
set -euo pipefail

GATEWAY_IP="10.0.0.1"
WAN_CHECK_IP="1.1.1.1"
LOG_TAG="wifi-watchdog"
RATE_LIMIT_FILE="/tmp/.wifi_restart_timestamp"
COOLDOWN_SEC=180

# Check rate-limiting cooldown
if [ -f "$RATE_LIMIT_FILE" ]; then
    LAST_RESTART=$(cat "$RATE_LIMIT_FILE")
    NOW=$(date +%s)
    if [ $((NOW - LAST_RESTART)) -lt $COOLDOWN_SEC ]; then
        exit 0
    fi
fi

# Step 1: Check Local AP Gateway
if ! ping -c 2 -W 2 "$GATEWAY_IP" > /dev/null 2>&1; then
    # Step 2: Confirm WAN is also unreachable (avoids AP ICMP-drop false positives)
    if ! ping -c 2 -W 2 "$WAN_CHECK_IP" > /dev/null 2>&1; then
        logger -t "$LOG_TAG" "Wi-Fi link failure detected on wlan0. Initiating soft reconnect..."
        if command -v nmcli >/dev/null 2>&1; then
            nmcli connection up "FriendsWiFiSSID" || {
                logger -t "$LOG_TAG" "Soft reconnect failed. Cycling Wi-Fi radio subsystem..."
                nmcli radio wifi off
                sleep 3
                nmcli radio wifi on
                echo $(date +%s) > "$RATE_LIMIT_FILE"
            }
        else
            ip link set wlan0 down
            sleep 2
            ip link set wlan0 up
            echo $(date +%s) > "$RATE_LIMIT_FILE"
        fi
    fi
fi
