#!/bin/bash

# Initialize output
OUTPUT=""
NUMBER=0

# Get all network interfaces (excluding loopback)
mapfile -t INTERFACES < <(ip -o link show | awk -F': ' '{print $2}' | grep -v '^lo$')

# Loop through interfaces
for DEVICE in "${INTERFACES[@]}"; do

   # Check if interface is UP
   if ! ip link show "$DEVICE" | grep -q "state UP"; then
      continue
   fi

   # Get IP address
   IP=$(ip -4 addr show "$DEVICE" | grep -oP '(?<=inet\s)\d+(\.\d+){3}' | head -n 1)

   # Skip if no IP assigned
   if [[ -z "$IP" ]]; then
      continue
   fi

   # Add separator for multiple connections
   if [ "$NUMBER" -gt 0 ]; then
      OUTPUT+="<span color='#AEAEAE'> </span>"
   fi
   ((NUMBER++))

   # Determine interface type
   TYPE="ethernet"
   if [[ -L "/sys/class/net/$DEVICE/phy80211" ]] || [[ -d "/sys/class/net/$DEVICE/wireless" ]]; then
      TYPE="wifi"
   fi

   SSID=""
   SIGNAL=""

   if [ "$TYPE" == "wifi" ]; then

      # Get SSID
      SSID=$(iw dev "$DEVICE" info 2>/dev/null | grep ssid | awk '{print $2}')

      # Try Method 1: iw
      if [[ -z "$SIGNAL" ]]; then
         WIFI_LINK=$(iw dev "$DEVICE" link 2>/dev/null)
         if [[ "$WIFI_LINK" =~ signal:\ ([+-]?[0-9]+) ]]; then
            SIGNAL_DBM="${BASH_REMATCH[1]}"
            SIGNAL=$((2 * (SIGNAL_DBM + 100)))
            [[ "$SIGNAL" -lt 0 ]] && SIGNAL=0
            [[ "$SIGNAL" -gt 100 ]] && SIGNAL=100
         fi
      fi

      # Try Method 3: iwd
      if [[ -z "$SIGNAL" ]] && command -v iwctl &> /dev/null; then
         WIFI_LINK=$(iwctl station "$DEVICE" show 2>/dev/null)
         if [[ "$WIFI_LINK" =~ RSSI[[:space:]]+(-?[0-9]+) ]]; then
            SIGNAL_DBM="${BASH_REMATCH[1]}"
            SIGNAL=$((2 * (SIGNAL_DBM + 100)))
            [[ "$SIGNAL" -lt 0 ]] && SIGNAL=0
            [[ "$SIGNAL" -gt 100 ]] && SIGNAL=100
         fi
      fi

      # Try Method 2: NetworkManager
      if [[ -z "$SIGNAL" ]] && command -v nmcli &> /dev/null; then
         SIGNAL=$(nmcli -t -f DEVICE,SIGNAL dev wifi 2>/dev/null | grep "^$DEVICE:" | cut -d':' -f2)
      fi

   fi

   # Define colors based on signal strength
   if [[ -z "$SIGNAL" ]]; then
       COLOR="#AEAEAE"
       BAR="☵"
   else
       if [ "$SIGNAL" -ge 90 ]; then
           BAR="☰"
           COLOR="#00FF00"
       elif [ "$SIGNAL" -ge 70 ]; then
           BAR="☱"
           COLOR="#AEFF00"
       elif [ "$SIGNAL" -ge 50 ]; then
           BAR="☳"
           COLOR="#DDFF00"
       elif [ "$SIGNAL" -ge 30 ]; then
           BAR="☷"
           COLOR="#FFDD00"
       elif [ "$SIGNAL" -ge 10 ]; then
           BAR="⚏"
           COLOR="#FFAE00"
       else
           BAR="⚋"
           COLOR="#FF0000"
       fi
   fi

   ECHO=""
   if [[ -n "$SSID" ]]; then
      ECHO+="$SSID "
   fi
   ECHO+="$BAR $IP"

   OUTPUT+="<span color='$COLOR'>$ECHO</span>"

done

echo "$OUTPUT"
exit 0