using System.Collections.Generic;
using System.Linq;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;

namespace BeWo.ViewModel
{
	public class MedikamentenverordnungslistenVM : 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";

		private CompactCustomerDC _Customer;
		private bool _Gueltig;
		private string _Notice;
		private List<MedikamentenverordnungDC> _Medikamentenverordnungen;
		private string _Ersteller;

		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 List<MedikamentenverordnungDC> Medikamentenverordnungen
		{
			get { return _Medikamentenverordnungen; }
			set
			{
				if (!AreDifferent(_Medikamentenverordnungen, value)) return;

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

		public MedikamentenverordnungslistenVM(MedikamentenverordnungslisteDC pDC) : base(pDC, pDC.MedikamentenverordnungslistenOid == null) { }

		protected override void InitByDataContract(MedikamentenverordnungslisteDC pDataContract)
		{
			_Medikamentenverordnungen = IsNew && pDataContract.Medikamentenverordnungen == null ? new List<MedikamentenverordnungDC>() : new List<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;
		}

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

			return pDataContract;
		}
	}
}
