using System;
namespace AsterNET.FastAGI.Command
{
	/// <summary>
	/// Say a given digit string, returning early if any of the given DTMF digits are received on the channel.<br/>
	/// Returns 0 if playback completes without a digit being pressed,
	/// or the ASCII numerical value of the digit if one was pressed or -1 on error/hangup.
	/// </summary>
	public class SayDigitsCommand : AGICommand
	{
		#region Variables
		/// <summary> The digits string to say.</summary>
		private string digits;
		/// <summary> When one of these digits is pressed while saying the digits the command returns.</summary>
		private string escapeDigits;
		#endregion

		#region Digits
		/// <summary>
		/// Get/Set the digits string to say.
		/// </summary>
		public string Digits
		{
			get { return digits; }
			set { this.digits = value; }
		}
		#endregion
		#region EscapeDigits
		/// <summary>
		/// Get/Set the digits that allow the user to interrupt this command.
		/// </summary>
		public string EscapeDigits
		{
			get { return escapeDigits; }
			set { this.escapeDigits = value; }
		}
		#endregion

		#region Constructor - SayDigitsCommand(string digits)
		/// <summary>
		/// Creates a new SayDigitsCommand.
		/// </summary>
		/// <param name="digits">the digits to say.</param>
		public SayDigitsCommand(string digits)
		{
			this.digits = digits;
			this.escapeDigits = null;
		}
		#endregion
		#region Constructor - SayDigitsCommand(string digits, string escapeDigits)
		/// <summary>
		/// Creates a new SayDigitsCommand.
		/// </summary>
		/// <param name="digits">the digits to say.</param>
		/// <param name="escapeDigits">the digits that allow the user to interrupt this command.</param>
		public SayDigitsCommand(string digits, string escapeDigits)
		{
			this.digits = digits;
			this.escapeDigits = escapeDigits;
		}
		#endregion

		#region BuildCommand()
		public override string BuildCommand()
		{
			return "SAY DIGITS " + EscapeAndQuote(digits) + " " + EscapeAndQuote(escapeDigits);
		}
		#endregion
	}
}