using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using DescriptiveEnum;
namespace VEPROMS.CSLA.Library
{
	[Serializable]
	[TypeConverter(typeof(ExpandableObjectConverter))]
	public class StepConfig : ConfigDynamicTypeDescriptor, INotifyPropertyChanged
	{
		#region DynamicTypeDescriptor
		internal override bool IsReadOnly
		{
			get { return false; }//_Section == null; }
		}
		#endregion
		#region XML
		private XMLProperties _Xp;
		private XMLProperties Xp
		{
			get { return _Xp; }
		}
		#endregion
		#region Constructors
		//PROPGRID: Hide ParentLookup
		[Browsable(false)]
		public bool ParentLookup
		{
			get { return _Xp.ParentLookup; }
			set { _Xp.ParentLookup = value; }
		}
		//PROPGRID: Had to comment out NonSerialized to hide AncestorLookup from Property Grid
		//[NonSerialized]
		//private bool _AncestorLookup;
		////PROPGRID: Hide AncestorLookup
		//[Browsable(false)]
		//public bool AncestorLookup
		//{
		//  get { return _AncestorLookup; }
		//  set { _AncestorLookup = value; }
		//}
		private Step _Step;
        private StepInfo _StepInfo;
		public StepConfig(Step step)
		{
			_Step = step;
			string xml = step.MyContent.Config;
			if (xml == string.Empty) xml = "";
			_Xp = new XMLProperties(xml);
		}
		public StepConfig(StepInfo stepInfo)
		{
			_StepInfo = stepInfo;
			string xml = stepInfo.MyContent.Config;
			if (xml == string.Empty) xml = "";
			_Xp = new XMLProperties(xml);
		}
		public StepConfig(string xml)
		{
			if (xml == string.Empty) xml = "";
			_Xp = new XMLProperties(xml);
		}
		public StepConfig()
		{
			_Xp = new XMLProperties();
		}
		internal string GetValue(string group, string item)
		{
			return _Xp[group, item];
		}
		#endregion
		#region Local Properties
		
		#endregion
		#region ToString
		public override string ToString()
		{
			string s = _Xp.ToString();
			if (s == "" || s == "") return string.Empty;
			return s;
		}
		#endregion
		#region StepAttr
		//[Category("Step Attributes")]
		//[DisplayName("Step Continuous Action Summary")]
		//[RefreshProperties(RefreshProperties.All)]
		//[Description("Step Continuous Action Summary")]
		public bool Step_CAS
		{
			get
			{
				string s = _Xp["Step", "ContActSum"];
				//If there is no value to get, then get the parent value (a.k.a. default value).
				if (s == string.Empty) return false;
				if (s == "True") return true;
				return false;
			}
			set
			{
				string s = _Xp["Step", "ContActSum"];
				if (value.ToString() == s) return;
				_Xp["Step", "ContActSum"] = value.ToString();
				OnPropertyChanged("Step_CAS");
			}
		}
		//[Category("Step Attributes")]
		//[DisplayName("Step Check Off Index")]
		//[RefreshProperties(RefreshProperties.All)]
		//[Description("Step Check Off Index")]
		public int Step_CheckOffIndex
		{
			get
			{
				string s = _Xp["Step", "CheckOffIndex"];
				if (s == string.Empty) return -1;
				return int.Parse(s);
			}
			set
			{
				string s = _Xp["Step", "CheckOffIndex"];
				if (value.ToString() == s) return;
				_Xp["Step", "CheckOffIndex"] = value.ToString();
				OnPropertyChanged("Step_CheckOffIndex");
			}
		}
		//[Category("Step Attributes")]
		//[DisplayName("Step Manual Pagebreak")]
		//[RefreshProperties(RefreshProperties.All)]
		//[Description("Step Manual Pagebreak")]
		public bool Step_ManualPagebreak
		{
			get
			{
				string s = _Xp["Step", "ManualPagebreak"];
				if (s == string.Empty) return false;
				if (s == "True") return true;
				return false;
			}
			set
			{
				string s = _Xp["Step", "ManualPagebreak"];
				if (value.ToString() == s) return;
				_Xp["Step", "ManualPagebreak"] = value.ToString();
				OnPropertyChanged("Step_ManualPagebreak");
			}
		}
		//[Category("Step Attributes")]
		//[DisplayName("Step Change Bar Override")]
		//[RefreshProperties(RefreshProperties.All)]
		//[Description("Step Change Bar Override")]
		public string Step_CBOverride
		{
			get
			{
				string s = _Xp["Step", "CBOverride"];
				if (s == string.Empty) return null;
				return s;
			}
			set
			{
				string s = _Xp["Step", "CBOverride"];
				
				if (value != null && value.ToString() == s) return;
				if (value == null && s != null) _Xp["Step", "CBOverride"] = null;
				else _Xp["Step", "CBOverride"] = value.ToString();
				OnPropertyChanged("Step_CBOverride");
			}
		}
		public string Step_MultipleChangeID 
		{
			get
			{
				string s = _Xp["Step", "MultipleChangeID"];
				if (s == string.Empty) return null;
				return s;
			}
			set
			{
				string s = _Xp["Step", "MultipleChangeID"];
				if (value != null && value.ToString() == s) return;
				if (value == null && s != null) _Xp["Step", "MultipleChangeID"] = null;
				else _Xp["Step", "MultipleChangeID"] = value.ToString();
				OnPropertyChanged("Step_MultipleChangeID");
			}
		}
		#endregion
	}
}