//  MPDItems.cs
//
//  GNOME Do is the legal property of its developers, whose names are too numerous
//  to list here.  Please refer to the COPYRIGHT file distributed with this
//  source distribution.
//
//  This program is free software: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//
//  You should have received a copy of the GNU General Public License
//  along with this program.  If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Threading;
using System.Diagnostics;


using Do.Universe;

namespace MPD
{
	class BrowseMusicItem: Item
	{
		string name, description;

		public BrowseMusicItem (string name, string description)
		{
			this.name = name;
			this.description = description;
		}

		public override string Name { get { return name; } }
		public override string Description { get { return description; } }
		public override string Icon { get { return "gtk-cdrom"; } }
	}

	class BrowseArtistsMusicItem : BrowseMusicItem
	{
		public BrowseArtistsMusicItem ():
			base ("Browse Artists", "Browse MPD Music by Artist")
		{
		}
	}

	class BrowseAlbumsMusicItem : BrowseMusicItem
	{
		public BrowseAlbumsMusicItem ():
			base ("Browse Albums", "Browse MPD Music by Album")
		{
		}
	}
	class BrowseAllMusicItem : BrowseMusicItem
	{
		ArtistMusicItem artist;
		public BrowseAllMusicItem (ArtistMusicItem artist):
			base ("Browse Music", "All songs by " + artist.Artist)
		{
			this.artist = artist;
		}
		public ArtistMusicItem Artist { get { return artist; } }
	}
	public class MPDRunnableItem : Item, IRunnableItem
	{
		public static readonly MPDRunnableItem[] DefaultItems =
			new MPDRunnableItem[] {

				new MPDRunnableItem ("Play",
						"Play Current Track in MPD",
						"player_play",
						"play"),

				new MPDRunnableItem ("Pause",
						"Pause MPD Playback",
						"player_pause",
						"pause"),

				new MPDRunnableItem ("Next",
						"Play Next Track in MPD",
						"player_end",
						"next"),

				new MPDRunnableItem ("Previous",
						"Play Previous Track in MPD",
						"player_start",
						"previous"),

				new MPDRunnableItem ("Volume Up",
						"Increase MPD Playback Volume",
						"audio-volume-high",
						"volume +10"),

				new MPDRunnableItem ("Volume Down",
						"Decrease MPD Playback Volume",
						"audio-volume-low",
						"volume -10"),

			    new MPDRunnableItem ("Update",
			            "Refresh MPD Database",
			            "reload",
						"update"),
			};

		string name, description, icon, command;

		public MPDRunnableItem (string name, string description, string icon, string command)
		{
			this.name = name;
			this.description = description;
			this.icon = icon;
			this.command = command;
		}

		public override string Name { get { return name; } }
		public override string Description { get { return description; } }
		public override string Icon { get { return icon; } }

		public void Run ()
		{
			new Thread ((ThreadStart) delegate {
					MPD.Client (command);
					}).Start ();
		}

	}
}
