using System.Collections.Specialized;

using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;

namespace BeWo.ViewModel
{
	public class MedikamentenverordnungslisteVM : AbstractDCMapperVM<MedikamentenverordnungslisteDC>
	{
		public static string PropertyName_Customer = "Customer";
		public static string PropertyName_Gueltig = "Gueltig";
		public static string PropertyName_Notice = "Notice";
		public static string PropertyName_Medikamentenverordnungen = "Medikamentenverordnungen";
		public static string PorpertyName_Ersteller = "Ersteller";
		public static string PropertyName_ErstellDatum = "ErstellDatum";
		public static string PropertyName_MedListType = "MedListType";

		private CompactCustomerDC _Customer;
		private bool _Gueltig;
		private string _Notice;
		private string _Ersteller;
		private string _ErstellDatum;
		private bool _MedListType;

		public string Ersteller
		{
			get { return _Ersteller; }
		}

		public CompactCustomerDC Customer
		{
			get { return _Customer; }
			set
			{
				if (!AreDifferent(_Customer, value)) return;

				_Customer = value;
				StoreDirtyInformation(AreDifferent(DataContract.Customer, value), PropertyName_Customer);
				FirePropertyChanged(PropertyName_Customer);
			}
		}

		public bool Gueltig
		{
			get { return _Gueltig; }
			set
			{
				if (!AreDifferent(_Gueltig, value)) return;

				_Gueltig = value;
				StoreDirtyInformation(AreDifferent(DataContract.Gueltig, value), PropertyName_Gueltig);
				FirePropertyChanged(PropertyName_Gueltig);
			}
		}

		public string Notice
		{
			get { return _Notice; }
			set
			{
				if (!AreDifferent(_Notice, value)) return;

				_Notice = value;
				StoreDirtyInformation(AreDifferent(DataContract.Notice, value), PropertyName_Notice);
				FirePropertyChanged(PropertyName_Notice);
			}
		}

		public string ErstellDatum
		{
			get { return _ErstellDatum; }
		}

		public bool MedListType
		{
			get { return _MedListType; }
			set
			{
				if (!AreDifferent(_MedListType, value)) return;

				_MedListType = value;
				StoreDirtyInformation(AreDifferent(DataContract.MedListType, value), PropertyName_MedListType);
				FirePropertyChanged(PropertyName_MedListType);
			}
		}

		private TrulyObservableCollection<MedikamentenverordnungDC> _Medikamentenverordnungen;
		public TrulyObservableCollection<MedikamentenverordnungDC> Medikamentenverordnungen
		{
			get { return _Medikamentenverordnungen; }
			set
			{
				if (!AreDifferent(_Medikamentenverordnungen, value)) return;

				_Medikamentenverordnungen = value;
				StoreDirtyInformation(AreDifferent(DataContract.Medikamentenverordnungen, value), PropertyName_Medikamentenverordnungen);
				FirePropertyChanged(PropertyName_Medikamentenverordnungen);
			}
		}

		public MedikamentenverordnungslisteVM(MedikamentenverordnungslisteDC pDC) : base(pDC, pDC.MedikamentenverordnungslistenOid == null)
		{
			if (Medikamentenverordnungen == null)
			{
				Medikamentenverordnungen = new TrulyObservableCollection<MedikamentenverordnungDC>();
			}
			Medikamentenverordnungen.CollectionChanged += delegate(object sender, NotifyCollectionChangedEventArgs args)
			{
				StoreDirtyInformation(true, PropertyName_Medikamentenverordnungen);
				FirePropertyChanged(PropertyName_Medikamentenverordnungen);
			};
		}

		protected override void InitByDataContract(MedikamentenverordnungslisteDC pDataContract)
		{
			_Medikamentenverordnungen = IsNew && pDataContract.Medikamentenverordnungen == null ? new TrulyObservableCollection<MedikamentenverordnungDC>() : new TrulyObservableCollection<MedikamentenverordnungDC>(pDataContract.Medikamentenverordnungen);

			foreach (var item in _Medikamentenverordnungen)
			{
				item.MedikamentenverordnungOid = null;
				item.MedikamentenverordnungVersion = null;
			}

			_Customer = pDataContract.Customer;
			_Gueltig = pDataContract.Gueltig;
			_Notice = pDataContract.Notice;
			_Ersteller = pDataContract.Ersteller;
			_ErstellDatum = pDataContract.ErstellDatum;
			_MedListType = pDataContract.MedListType;
		}

		protected override MedikamentenverordnungslisteDC MapToDataContract(MedikamentenverordnungslisteDC pDataContract, bool doCommit)
		{
			pDataContract.Customer = _Customer;
			pDataContract.Gueltig = _Gueltig;
			pDataContract.Notice = _Notice;
			pDataContract.Medikamentenverordnungen = _Medikamentenverordnungen;
			pDataContract.Ersteller = _Ersteller;
			pDataContract.ErstellDatum = _ErstellDatum;
			pDataContract.MedListType = _MedListType;

			return pDataContract;
		}
	}
}
