using System;

using BeWo.Validation;

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

namespace BeWo.ViewModel
{
	public class BargeldtransaktionsVM : AbstractDCMapperVM<BargeldtransaktionDC>
	{
        //public static string PropertyName_Customer                  = "Customer";
        public static string PropertyName_Zahlungstyp               = "Zahlungstyp";
        public static string PropertyName_Zahlungsdatum             = "Zahlungsdatum";
        public static string PropertyName_Betrag                    = "Betrag";
        public static string PropertyName_Transaktionskassenbestand = "Transaktionskassenbestand";
	    public static string PropertyName_Notice                    = "Notice";

        //private CompactCustomerDC      _Customer;
		private EnumValue<Zahlungstyp> _Zahlungstyp;
		private DateTime?              _Zahlungsdatum;
		private decimal?               _Betrag;
		private decimal?               _Transaktionskassenbestand;
	    private string                 _Notice;

        //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 string Notice
	    {
            get { return _Notice; }

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

		[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
		public EnumValue<Zahlungstyp> Zahlungstyp
		{
			get { return _Zahlungstyp; }
			set
			{
				if (!AreDifferent(_Zahlungstyp, value))
				{
				    return;
				}

				_Zahlungstyp = value;
				StoreDirtyInformation(AreDifferent(DataContract.Zahlungstyp, value), PropertyName_Zahlungstyp);
				FirePropertyChanged(PropertyName_Zahlungstyp);
			}
		}

		[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
		public DateTime? Zahlungsdatum
		{
			get { return _Zahlungsdatum; }
			set
			{
				if (!AreDifferent(_Zahlungsdatum, value))
				{
				    return;
				}

				_Zahlungsdatum = value;
				StoreDirtyInformation(AreDifferent(DataContract.Zahlungsdatum, value), PropertyName_Zahlungsdatum);
				FirePropertyChanged(PropertyName_Zahlungsdatum);
			}
		}

		[Validation(ValidationRule = ValidationRules.GreaterThanZero)]
		public decimal? Betrag
		{
			get { return _Betrag; }
			set
			{
				if (!AreDifferent(_Betrag, value))
				{
				    return;
				}

				_Betrag = value;
				StoreDirtyInformation(AreDifferent(DataContract.Betrag, value), PropertyName_Betrag);
				FirePropertyChanged(PropertyName_Betrag);
			}
		}

		public decimal? Transaktionskassenbestand
		{
			get { return _Transaktionskassenbestand; }
			set
			{
				if (!AreDifferent(_Transaktionskassenbestand, value))
					return;

				_Transaktionskassenbestand = value;
				StoreDirtyInformation(AreDifferent(DataContract.Transaktionskassenbestand, value), PropertyName_Transaktionskassenbestand);
				FirePropertyChanged(PropertyName_Transaktionskassenbestand);
			}
		}

		public BargeldtransaktionsVM(BargeldtransaktionDC pDataContract) : base(pDataContract, pDataContract.BargeldtransaktionOid == null) { }

		protected override void InitByDataContract(BargeldtransaktionDC pDataContract)
		{
            if (!IsNew)
            {
				_Zahlungsdatum             = pDataContract.Zahlungsdatum;
				_Betrag                    = pDataContract.Betrag;
                //_Customer                  = pDataContract.Customer;
				_Zahlungstyp               = new EnumValue<Zahlungstyp>(pDataContract.Zahlungstyp, EnumTranslations.AllTranslations[pDataContract.Zahlungstyp]);
				_Transaktionskassenbestand = pDataContract.Transaktionskassenbestand;
			    _Notice                    = pDataContract.Notice;
            }
		}

		protected override BargeldtransaktionDC MapToDataContract(BargeldtransaktionDC pDataContract, bool doCommit)
		{
			pDataContract.Zahlungsdatum             = _Zahlungsdatum;
			pDataContract.Betrag                    = _Betrag;
            //pDataContract.Customer                  = _Customer;
			pDataContract.Zahlungstyp               = _Zahlungstyp.Enum;
			pDataContract.Transaktionskassenbestand = _Transaktionskassenbestand;
		    pDataContract.Notice                    = _Notice;

			return pDataContract;
		}
	}
}