#!/bin/sh

mpv_socket=`sockstat -u | awk '$2 == "mpv" { print $6; exit; }'`

next() {
	pcur=`{ echo '{ "command": ["get_property", "playlist-pos"] }' | socat - $mpv_socket | jq '.data'; } 2>/dev/null`
	pnext=`expr "$pcur" + 1`
	{ echo '{ "command": ["set_property", "playlist-pos", '"$pnext"' ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
}

prev() {
	pcur=`{ echo '{ "command": ["get_property", "playlist-pos"] }' | socat - $mpv_socket | jq '.data'; } 2>/dev/null`
	pprev=`expr "$pcur" - 1`
	{ echo '{ "command": ["set_property", "playlist-pos", '"$pprev"' ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
}

pause() {
	{ echo '{ "command": ["set_property", "pause", true ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
}

play() {
	{ echo '{ "command": ["set_property", "pause", false ] }' | socat - $mpv_socket ; } >/dev/null 2>&1
}

status() {
	media_title=`{ echo '{ "command": ["get_property", "media-title"] }' | socat - $mpv_socket | jq -r '.data' ; } 2> /dev/null`
	track=`{ echo '{ "command": ["get_property", "metadata/by-key/track"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
	track=${track%%/*}	# Get rid of possible `/<n>'
	artist=`{ echo '{ "command": ["get_property", "metadata/by-key/artist"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
	title=`{ echo '{ "command": ["get_property", "metadata/by-key/title"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
	album=`{ echo '{ "command": ["get_property", "metadata/by-key/album"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`

	chapter=`{ echo '{ "command": ["get_property", "chapter"] }' | socat - $mpv_socket | jq -r '.data'; } 2> /dev/null`
	chapter_title=`{ echo '{ "command": ["get_property", "chapter-list/'"${chapter}"'/"] }' | socat - $mpv_socket | jq -r '.data.title'; } 2> /dev/null`

	if [ "$track" != "null" ]; then
		printf "[%02d] " "$track"
	elif [ "$chapter" != "null" ]; then
		printf "[%02d] " "$((chapter + 1))"
	fi
	if [ "$title" != "null" ] && [ "$artist" != "null" ]; then
		printf "%s - %s " "$artist" "$title"
	elif [ "$title" != "null" ]; then
		printf "%s " "$title"
	elif [ "$chapter_title" != "null" ]; then
		printf "%s " "$chapter_title"
	elif [ "$media_title" != "null" ]; then
		printf "%s " "$media_title"
	fi
	[ "$album" != "null" ] && printf "(%s) " "$album"
	printf "\n"
}

usage() {
	echo 'usage: mc next|pause|play|prev|status'
	exit 1
}

case "$1" in
	n|next)
		next
		;;
	pa|pause)
		pause
		;;
	pl|play)
		play
		;;
	p|prev)
		prev
		;;
	s|status)
		status
		;;
	*)
		usage
		;;
esac
