using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace AsterNET.Manager.Event
{
	public abstract class AbstractAgentVariables : ManagerEvent
	{
		private Dictionary<string, string> variables;

		public AbstractAgentVariables(ManagerConnection source)
			: base(source)
		{ }

		#region Variable
		/// <summary>
		/// Get/Set the variables to set on the queue call in native asterisk format.<br/>
		/// Example: "VAR1=abc|VAR2=def".
		/// </summary>
		public string Variable
		{
			get { return Helper.JoinVariables(variables, Common.VAR_DELIMITER, "="); }
			set { variables = Helper.ParseVariables(variables, value, Common.VAR_DELIMITER); }
		}
		#endregion

		#region GetVariables()
		/// <summary>
		/// Get the variables dictionary to set on the originated call.
		/// </summary>
		public IDictionary GetVariables()
		{
			return variables;
		}
		#endregion

		#region SetVariables(IDictionary vars)
		/// <summary>
		/// Set the variables dictionary to set on the originated call.
		/// </summary>
		public void SetVariables(Dictionary<string, string> vars)
		{
			this.variables = vars;
		}
		#endregion

		#region SetVariable(string name, string val)
		/// <summary>
		/// Sets a variable dictionary on the originated call. Replaces any existing variable with the same name.
		/// </summary>
		public void SetVariable(string key, string val)
		{
			if (variables == null)
				variables = new Dictionary<string, string>();
			if (variables.ContainsKey(key))
				variables[key] = val;
			else
				variables.Add(key, val);
		}
		#endregion

		#region GetVariable(string name)
		/// <summary>
		/// Gets a variable on the originated call. Replaces any existing variable with the same name.
		/// </summary>
		public string GetVariable(string key)
		{
			if (variables == null)
				return string.Empty;
			return variables[key];
		}
		#endregion
	}
}