/*
	ap-control

	(c) Frank Baumgart

	TODO:
	- "playlist" without further parameters should output current playlist
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <control.h>


static void usage(void)
{
	puts("usage: ap-control -s session command\n\n"
	"supported commands:\n\n"
	"play <title> [<title> ...]\n"
	"playlist <playlistfile>\n"
	"playlist-clear\n"
	"next\n"
	"prev\n"
	"save\n"
	"shuffle\n"
	"sort <direction>\n"
	"stop\n"
	"pause\n"
	"cont\n"
	"seek second\n"
	"query\n"
	"title\n"
	"time\n"
	"quit");
	exit(1);
}


int main(int argc, char *argv[])
{
	if (argc < 4)
		usage();

	int session;
	ap_find_session(argv[2],&session);
	if(!ap_session_running(session))
		return 1;

	if (!strcmp(argv[3], "play") && argc >= 4)
	{
//		ap_clear_playlist(session);
//		ap_stop(session);			
		int i;
		for (i = 2; i < argc; i++)
			ap_add_path(session, argv[i]);

		return 0;
	}

	if (!strcmp(argv[3], "playlist") && argc == 5)
	{
		int ret = 1;
//		ret &= ap_stop(session);
		ret &= ap_clear_playlist(session);
		ret &= ap_add_playlist(session, argv[4]);

		return ret == 1;
	}

	if (!strcmp(argv[3], "playlist-clear"))
		return ap_clear_playlist(session) == 1;

	if (!strcmp(argv[3], "sort") && argc == 5)
		return ap_sort(session, argv[4]) == 1;

	if (!strcmp(argv[3], "seek") && argc == 5)
		return ap_set_position(session, atoi(argv[4])) == 1;

	if (!strcmp(argv[3], "volume") && argc == 5)
		return ap_set_volume(session, atoi(argv[4])) == 1;

	if (!strcmp(argv[3], "stop"))
		return (ap_clear_playlist(session) && ap_stop(session));

	if (!strcmp(argv[3], "prev"))
		return ap_prev(session) == 1;

	if (!strcmp(argv[3], "next"))
		return ap_next(session) == 1;

	if (!strcmp(argv[3], "pause"))
		return ap_pause(session) == 1;

	if (!strcmp(argv[3], "cont"))
		return ap_unpause(session) == 1;

	if (!strcmp(argv[3], "quit"))
		return ap_quit(session) == 1;

	if (!strcmp(argv[3], "shuffle"))
		return ap_shuffle_playlist(session) == 1;

	if (!strcmp(argv[3], "save"))
		return ap_save_playlist(session) == 1;

	if (!strcmp(argv[3], "query"))
	{
		int playing;

		if (ap_is_playing(session, &playing))
		{
			puts(playing ? "playing" : "not playing");
			return 0;
		}
		return 1;
	}

	if (!strcmp(argv[3], "title"))
	{
		char result[AP_TITLE_MAX];

		if (ap_get_title(session, result) && *result)
		{
			puts(result);
			return 0;
		}
		return 1;
	}

	if (!strcmp(argv[3], "time"))
	{
		int pos_frame, pos_sec;
		int length_frame, length_sec;

		if (!ap_session_running(session))
			return 1;

		// Totals
		ap_get_frames(session, &length_frame);
		ap_get_length(session, &length_sec);

		// Current position
		ap_get_frame(session, &pos_frame);
		ap_get_position(session, &pos_sec);

		printf("Frame: %d/%d\n", pos_frame, length_frame);
		printf("Seconds: %d/%d\n", pos_sec, length_sec);

		return 0;
	}

	usage();

	return 0;
}
