#!/usr/bin/env bash
# remote-interactive-wifi-setup.sh
# Configure Wi-Fi on a remote Raspberry Pi over SSH.

# --- Ask for connection details ---
read -p "Enter Raspberry Pi hostname or IP (default: raspberrypi.local): " HOSTNAME
HOSTNAME=${HOSTNAME:-raspberrypi.local}

read -p "Enter SSH username (default: pi): " REMOTE_USER
REMOTE_USER=${REMOTE_USER:-pi}

read -p "Use password-based SSH? (y/n) [default: n]: " USE_PASS
USE_PASS=${USE_PASS:-n}

if [[ "$USE_PASS" =~ ^[Yy]$ ]]; then
  read -s -p "Enter SSH password for $REMOTE_USER@$HOSTNAME: " REMOTE_PASS
  echo
fi

# --- Check reachability ---
echo "🔎 Checking if $HOSTNAME is reachable ..."
if ! ping -c1 -t1 "$HOSTNAME" >/dev/null 2>&1; then
  echo "❌ Could not reach $HOSTNAME. Aborting."
  exit 1
fi

# --- Ask for Wi-Fi details ---
read -p "Enter WiFi SSID: " SSID
read -s -p "Enter WiFi password: " PASSWORD
echo

# --- Build remote command ---
REMOTE_CMD=$(cat <<EOF
set -e

# Detect Wi-Fi interface (fallback to wlan0 if iw not available)
if command -v iw >/dev/null 2>&1; then
    WIFI_IFACE=\$(iw dev | awk '/Interface/ {print \$2; exit}')
else
    WIFI_IFACE="wlan0"
fi

if [ -z "\$WIFI_IFACE" ]; then
    echo "⚠️ Could not detect Wi-Fi interface, falling back to wlan0."
    WIFI_IFACE="wlan0"
fi

echo "✅ Using Wi-Fi interface: \$WIFI_IFACE"

# Check if SSID already exists
EXISTING_NET_ID=\$(sudo wpa_cli -i "\$WIFI_IFACE" list_networks | awk -F'\t' '\$2=="$SSID"{print \$1}')
if [ -n "\$EXISTING_NET_ID" ]; then
    echo "⚠️ SSID '$SSID' already exists (network ID \$EXISTING_NET_ID). Updating password..."
    sudo wpa_cli -i "\$WIFI_IFACE" set_network "\$EXISTING_NET_ID" psk '"$PASSWORD"'
    sudo wpa_cli -i "\$WIFI_IFACE" enable_network "\$EXISTING_NET_ID"
    NET_ID="\$EXISTING_NET_ID"
else
    echo "📡 Adding Wi-Fi network..."
    NET_ID=\$(sudo wpa_cli -i "\$WIFI_IFACE" add_network)
    if [ -z "\$NET_ID" ]; then
        echo "❌ Failed to create a new network. Aborting."
        exit 1
    fi
    echo "✅ Created network ID \$NET_ID"
    sudo wpa_cli -i "\$WIFI_IFACE" set_network "\$NET_ID" ssid '"$SSID"'
    sudo wpa_cli -i "\$WIFI_IFACE" set_network "\$NET_ID" psk '"$PASSWORD"'
    sudo wpa_cli -i "\$WIFI_IFACE" enable_network "\$NET_ID"
fi

sudo wpa_cli -i "\$WIFI_IFACE" save_config
sudo wpa_cli -i "\$WIFI_IFACE" reconfigure || sudo systemctl restart wpa_supplicant
echo "✅ Wi-Fi network '$SSID' is configured and enabled."
EOF
)

# --- Run remote command ---
echo "📡 Configuring Wi-Fi on $HOSTNAME..."
if [[ "$USE_PASS" =~ ^[Yy]$ ]] && command -v sshpass >/dev/null 2>&1; then
  sshpass -p "$REMOTE_PASS" ssh -o StrictHostKeyChecking=no "$REMOTE_USER@$HOSTNAME" "$REMOTE_CMD"
else
  ssh -o StrictHostKeyChecking=no "$REMOTE_USER@$HOSTNAME" "$REMOTE_CMD"
fi

