#!/bin/bash

. /opt/mqtt-mpd/mqmpd.cfg

id=`hostname`-$$

host=$1
passwd=$2

if [ "$passwd" = "-" ]
then

  command="mpc -h $host"

else

  command="mpc -h $host -P $passwd"

fi

while : 
do         
#    current=`mpc -h $host -P $passwd current | sed 's/"/\"/g'`
#    volume=`mpc -h $host -P $passwd volume | cut -d: -f2 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//'`
    
    mapfile -t array < <( $command )
    if [ ${#array[@]} = 3 ]
    then
      current=${array[0]}
      str2=( ${array[1]})
      str3=( ${array[2]})
      status=`echo ${str2[0]} | sed 's/^\[//' | sed 's/\]$//'`
      current_track_num=`echo ${str2[1]} | cut -d '/' -f 1 | sed 's/^#//'`
      tracks_in_list=`echo ${str2[1]} | cut -d '/' -f 2`
      current_pos=`echo ${str2[2]} | cut -d '/' -f 1`
      track_length=`echo ${str2[2]} | cut -d '/' -f 2`
      volume=`echo ${str3[1]} | sed 's/%//'`
      repeat=${str3[3]}
      random=${str3[5]}
      single=${str3[7]}
      consume=${str3[9]}
    else
      if [ ${#array[@]} = 1 ]
      then
        current='-'
        status='stopped'
        current_track_num='0'
        tracks_in_list='0'
        current_pos='-'
        track_length='-'
        str3=( ${array[0]})
        volume=`echo ${str3[1]} | sed 's/%//'`
        if [ "$volume" = "n/a" ]
        then
          volume="0"
        fi
        repeat=${str3[3]}
        random=${str3[5]}
        single=${str3[7]}
        consume=${str3[9]}
      else
        # not responding or error
        current='-'
        status='failed'
        current_track_num='0'
        tracks_in_list='0'
        current_pos='-'
        track_length='-'
        volume="0"
        repeat="off"
        random="off"
        single="off"
        consume="off"
      fi  
    fi  
   
    sleep 0.2
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/nowplaying -m "$current" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/volume -m "$volume" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/status -m "$status" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/currentnum -m "$current_track_num" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/tracks -m "$tracks_in_list" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/currentpos -m "$current_pos" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/tracklen -m "$track_length" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/repeat -m "$repeat" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/random -m "$random" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/single -m "$single" -u $mquser -P $mqpassword
    mosquitto_pub -i mqtt-mpd-$id -h $mqhost -p $mqport -t $mqtopic/$host/consume -m "$consume" -u $mquser -P $mqpassword

    $command idle
    if [ $? != 0 ]
    then
      sleep 60
    fi
  
done