#!/bin/bash

exists() {
    command -v "$1" >/dev/null 2>&1
}

echo_pad() {
    string=$1
    pad=$2
    printf '%s' "$string"
    printf '%*s' $(( $pad - ${#string} ))
}

useAvahi() {

    echo_pad "#" 4
    echo_pad "HOSTNAME" 20
    echo_pad "IP" 20
    echo_pad "APP" 15
    echo_pad "VERSION" 15
    echo_pad "DEVICE" 30
    echo

    printf -v line '%*s\n' 104
    echo ${line// /-}

    counter=0

    avahi-browse -t -r -p  "_arduino._tcp" 2>/dev/null | grep ^= | sort -t ';' -k 3 | while read line; do

        (( counter++ ))

        hostname=`echo $line | cut -d ';' -f4`
        ip=`echo $line | cut -d ';' -f8`
        txt=`echo $line | cut -d ';' -f10`
        app_name=`echo $txt | sed -n "s/.*app_name=\([^\"]*\).*/\1/p"`
        app_version=`echo $txt | sed -n "s/.*app_version=\([^\"]*\).*/\1/p"`
        board=`echo $txt | sed -n "s/.*target_board=\([^\"]*\).*/\1/p"`

        echo_pad "$counter" 4
        echo_pad "$hostname" 20
        echo_pad "$ip" 20
        echo_pad "$app_name" 15
        echo_pad "$app_version" 15
        echo_pad "$board" 30
        echo

    done

    echo

}

# ------------------------------------------------------------------------------

# Welcome
echo
echo "--------------------------------------------------------------"
echo "OTA-UPDATABLE DEVICES"
echo "--------------------------------------------------------------"
echo

if exists avahi-browse; then
    useAvahi
else
    echo "Avahi not installed"
    exit 1
fi