#!/bin/bash

export MPD_HOST="$HOME/.mpd/socket"
DUNST_ID=$(sum <<<"mpd" | cut -d' ' -f1)

# Déclaration des variables globales
declare -- cursong prevsong

# Tant que le service MPD fonctionne
while systemctl --user is-active mpd.service &>/dev/null
do
	# Toutes les 5 secondes, ou dès que le morceau se termine
	timeout 5 mpc -w current

	prevsong="$cursong"
	cursong="$(mpc -f '[[%artist%\n|%name%\n]%title%[\n%album%]]|[%file%]' current)"

	# Si le morceau a changé depuis la dernière vérification
	if [[ "$cursong" != "$prevsong" && "$prevsong" != "<i>Arrêt</i>" ]]
	then

		# Extractions des informations depuis la chaîne récupérée plus
		# tôt, vers un format plus lisible.
		artist="$(sed -n 1p <<<"$cursong")"
		title="$(sed -n 2p <<<"$cursong")"
		album="$(sed -n 3p <<<"$cursong")"

		# Petit trick : si le titre s’est retrouvé sur la première
		# ligne parce qu’il n’y a pas d’artiste renseigné, on corrige
		# le contenu des variables (pas forcément fiable, mais
		# chez moi ça marche™).
		[[ -z "$title" ]] && title="$artist" && artist=""

		# Si on obtiens un chemin absolu, on n’affiche que le nom, pas
		# le chemin.
		[[ -f "/${title}" ]] && title="$(basename "$title")"
		
		# Si aucune information n’est retournée, c’est que la lecture
		# s’est arrêtée. 
		if [[ -z "$cursong" ]]
		then
			cursong="<i>Arrêt</i>"
			unset artist title album
		fi

		# Notification du morceau
		dunstify -r "$DUNST_ID" "MPD" "$cursong"

		# Ajout au scrobbler Pleroma
		# curl -s -X POST -u "breizh:$(pass show Web/pleroma.breizh.pm)" \
		# 	--data-urlencode "title=${title}" \
		# 	--data-urlencode "artist=${artist}" \
		# 	--data-urlencode "album=${album}" \
		# 	https://pleroma.breizh.pm/api/v1/pleroma/scrobble &>/dev/null
	fi
done

# Si on sort de la boucle c’est que MPD est arrêté, c’est pas normal alors on
# sort en erreur.
exit 1
