#!/bin/bash

player="mpg123"
player_args="-o pulse"
editor="nano"

[ ! -x "$(which "$player")" ] && echo "play123: $player not found!" && exit 1
[ ! -x "$(which "$editor")" ] && echo "play123: $editor not found!" && exit 1

base="$HOME/.config/play123"
temp="/tmp/$USER-play123.pid"

[ -d "$base" ] || mkdir -p "$base"
[ -f "$base/playlist" ] || echo -e "http://orf-live.ors-shoutcast.at/fm4-q2a\nhttp://orf-live.ors-shoutcast.at/oe3-q2a" > "$base/playlist"
[ -f "$base/pos" ] || echo 1 > "$base/pos"
[ -f "$temp" ] || echo 1 > "$temp"

play123_play() {
	"$player" $player_args "$(playlist_current)" > /dev/null 2>&1 &
	echo $! > "$temp"
}

play123_stop() {
	pid="$(cat "$temp")"
	if [ "$(ps -o comm= -p $pid)" == "$player" ]; then
		kill "$pid"
	fi
}

play123_is_running() {
	pid="$(cat "$temp")"
	if [ "$(ps -o comm= -p $pid)" == "$player" ]; then
		return 0
	fi
	return 1
}

playlist_current() {
	echo "$(cat "$base/playlist" | head -n $(cat "$base/pos") | tail -n 1)"
}

playlist_next() {
	let pos="$(cat "$base/pos")+1"
	if [ "$pos" -gt "$(cat "$base/playlist" | wc -l)" ]; then
		pos=1
	fi
	echo "$pos" > "$base/pos"
}

playlist_prev() {
	let pos="$(cat "$base/pos")-1"
	if [ "$pos" -eq 0 ]; then
		pos="$(cat "$base/playlist" | wc -l)"
	fi
	echo "$pos" > "$base/pos"
}

case "$1" in
	playlist)
		"$editor" "$base/playlist"
		echo 1 > "$base/pos"
		;;
	play)
		play123_stop
		play123_play
		;;
	stop)
		play123_stop
		;;
	toggle)
		if(play123_is_running); then
			play123_stop
		else
			play123_play
		fi
		;;
	next|prev)
		playlist_$1
		if(play123_is_running); then
			play123_stop
			play123_play
		fi
		;;
	**)
		echo "Usage: play123 < command >"
		echo "playlist  Edit playlist"
		echo "play      Start playback"
		echo "stop      Stop playback"
		echo "toggle    Toggle playback"
		echo "next      Next url"
		echo "prev      Previous url"
		;;
esac

exit 0
