#!/usr/bin/env bash
# A non-interactive script that creates notifications (libnotify on Linux,
# native notifications on MacOS), announcing the currently playing song. Used by
# ncmpcpp.
_color() { printf '%s' "$1" "$2"; }
if ! pgrep mpd >/dev/null; then
  >&2 echo "mpd isn't running."
  exit 1
fi
info=$(mpc current -f ";%artist%;%album%;%title%;%file%")
if [[ ${info:0:1} != ";" ]]; then
  >&2 echo "nothing is playing."
  exit 1
fi
IFS=';' read -r _ artist album title file <<< "$info"
artist="${artist:-$(_color "#757575" "No Artist")}"
album="${album:-$(_color "#757575" "No Album")}"
title="${title:-$(_color "#757575" "Untitled")}"
rating=
playlist_dir=$(awk '/playlist_directory/ { print gensub(/"/, "", "g", $2); }' "$HOME/.config/mpd/mpd.conf")
playlist_dir="${playlist_dir/#\~/$HOME}"
case $(grep "$file" "$playlist_dir"/*-star.m3u) in
  */1-star.m3u:*) starn=1 ;;
  */2-star.m3u:*) starn=2 ;;
  */3-star.m3u:*) starn=3 ;;
  */4-star.m3u:*) starn=4 ;;
  */5-star.m3u:*) starn=5 ;;
esac
if [[ -n $starn ]]; then
  star_filled_icon="★"
  star_empty_icon="☆"
  if [[ $OSTYPE == linux* ]]; then
    star_filled_icon=$(_color "#8fb1cd" "$star_filled_icon")
    star_empty_icon=$(_color "#666666" "$star_empty_icon")
  fi
  for ((i=1;i<=5;i++)); do
    if (( "$starn" >= "$i" )); then
      rating="${rating}${star_filled_icon}"
    else
      rating="${rating}${star_empty_icon}"
    fi
  done
fi
case $OSTYPE in
  darwin*)
    [[ -n $rating ]] && rating="[$rating] "
    killall terminal-notifier
    terminal-notifier -title "$rating$title" -message "by $artist :: $album" -appIcon "/Applications/iTunes.app/Contents/Resources/iTunes.icns" &
    ;;
  linux*)
    [[ -n $rating ]] && rating="$rating
"
    notify-send --urgency=low --icon="media-playback-start" --app-name="ncmpcpp" "$rating$title" "${artist}\n${album}" &
    ;;
esac >/dev/null 2>&1
exit