#!/usr/bin/env bash

emit() {
  local first=true arr=""
  while IFS= read -r line; do
    local mac name connected
    mac=$(echo "$line" | awk '{ print $2 }')
    name=$(echo "$line" | awk '{ $1=$2=""; sub(/^ +/, ""); print }')
    info=$(bluetoothctl info "$mac" 2>/dev/null)
    connected=$(echo "$info" | grep -q "Connected: yes" && echo true || echo false)
    $first || arr="${arr},"
    arr="${arr}{\"mac\":\"${mac}\",\"name\":\"${name}\",\"connected\":${connected}}"
    first=false
  done < <(bluetoothctl devices 2>/dev/null)
  echo "[${arr}]"
}

emit
bluetoothctl monitor 2>/dev/null | while IFS= read -r line; do
  case "$line" in
    *"Powered"*|*"Connected"*|*"Device"*) emit ;;
  esac
done
