using System;

namespace AsterNET.Manager.Action
{
	/// <summary>
	/// The QueuePauseAction makes a queue member temporarily unavailabe (or available again).<br/>
	/// It is implemented in <code>apps/app_queue.c</code><br/>
	/// Available since Asterisk 1.2.
	/// </summary>
	public class QueuePauseAction : ManagerAction
	{
		private string iface;
		private bool paused;
		private string queue;

		/// <summary>
		/// Get the name of this action, i.e. "QueuePause".
		/// </summary>
		override public string Action
		{
			get
			{
				return "QueuePause";
			}
			
		}
		/// <summary>
		/// Get/Set the interface of the member to make available or unavailable.<br/>
		/// This property is mandatory.
		/// </summary>
		public string Interface
		{
			get { return this.iface; }
			set { this.iface = value; }
		}
		/// <summary>
		/// Get/Set Returns the name of the queue the member is made available or unavailable on.
		/// </summary>
		public string Queue
		{
			get { return this.queue; }
			set { this.queue = value; }
		}
		/// <summary>
		/// Get/Set if the member is made available or unavailable.<br/>
		/// <code>true</code> to make the member unavailbale,<br/>
		/// <code>false</code> make the member available
		/// </summary>
		public bool Paused
		{
			get { return this.paused; }
			set { this.paused = value; }
		}
		
		/// <summary>
		/// Creates a new empty QueuePauseAction.
		/// </summary>
		public QueuePauseAction()
		{
		}
		
		/// <summary>
		/// Creates a new QueuePauseAction that makes the member on the given
		/// interface unavailable on all queues.
		/// </summary>
		/// <param name="iface">the interface of the member to make unavailable</param>
		public QueuePauseAction(string iface)
		{
			this.iface = iface;
			this.paused = true;
		}
		
		/// <summary>
		/// Creates a new QueuePauseAction that makes the member on the given
		/// interface unavailable on the given queue.
		/// </summary>
		/// <param name="iface">the interface of the member to make unavailable</param>
		/// <param name="queue">the queue the member is made unvailable on</param>
		public QueuePauseAction(string iface, string queue)
		{
			this.iface = iface;
			this.queue = queue;
			this.paused = true;
		}
		
		/// <summary>
		/// Creates a new QueuePauseAction that makes the member on the given
		/// interface available or unavailable on all queues.
		/// </summary>
		/// <param name="iface">the interface of the member to make unavailable</param>
		/// <param name="paused"><code>true</code> to make the member unavailbale, <code>false</code> to make the member available</param>
		public QueuePauseAction(string iface, bool paused)
		{
			this.iface = iface;
			this.paused = paused;
		}
		
		/// <summary>
		/// Creates a new QueuePauseAction that makes the member on the given
		/// interface unavailable on the given queue.
		/// </summary>
		/// <param name="iface">the interface of the member to make unavailable</param>
		/// <param name="queue">the queue the member is made unvailable on</param>
		/// <param name="paused"><code>true</code> to make the member unavailbale, <code>false</code> to make the member available</param>
		public QueuePauseAction(string iface, string queue, bool paused)
		{
			this.iface = iface;
			this.queue = queue;
			this.paused = paused;
		}
	}
}