#!/usr/bin/env bash

# shellcheck source=include
source "./scripts/include"

STRENGTH_ICONS=("󰤫" "󰤯" "󰤟" "󰤢" "󰤥" "󰤨")
DISCONNECTED_ICON="󰤮"
WIFI_OFF="󰖪"

toggle() {
  status=$(rfkill -J | jq -r '.rfkilldevices[] | select(.type == "wlan") | .soft' | head -1)

  if [ "$status" = "unblocked" ]; then
    rfkill block wlan
  else
    rfkill unblock wlan
  fi
}

get_report() {
    connection_details="$(nmcli -t -f NAME,TYPE,DEVICE connection show --active | grep wireless | head -n1)"
    essid="$(echo $connection_details | cut -d':' -f1)"
    device="$(echo $connection_details | cut -d':' -f3)"
    if [ -n "$device" ]; then
      state="$(nmcli -t -f DEVICE,STATE device status | grep "$device" | head -n1 | cut -d':' -f2)"
      signal="$(nmcli -t -f in-use,signal dev wifi | grep "\*" | cut -d':' -f2)"
    else
      state="unknown"
      signal="0"
    fi

    if [ "$state" = "disconnected" ] ; then
      icon="$DISCONNECTED_ICON"
    elif [ "$state" = "unknown" ]; then
      icon="$WIFI_OFF"
    else
      icon="$(pick_icon "$signal" 0 100 "${STRENGTH_ICONS[@]}")"
    fi

    jq -n -c --monochrome-output \
      --arg essid "$essid" \
      --arg icon "$icon" \
      --arg state "$state" \
      --arg signal "$signal" \
      '$ARGS.named'
}

case "$1" in
  "toggle") toggle ;;
  "status") get_report ;;
  *) >&2 echo "Invalid usage, argument '$1' not recognized."; exit 1 ;;
esac