using System;
using System.Collections.Generic;
using System.Windows;

using BeWo.ServiceProxy;
using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;

using BS.Shared.DataContracts;
using BS.Shared.Extensions;

namespace BeWo.View.Detail
{
	public partial class MedikamentenverordnungslistenEditView
	{
		public MedikamentenverordnungslisteListVM ViewModel { get; set; }
		public MedikamentenverordnungslisteVM SelectedVM { get; set; }

		private readonly bool _IsInEditMode;

		public bool IsInEditMode
		{
			get { return !_IsInEditMode; }
		}

		public List<MedArtDC> MedArten { get; set; }
		
		public override bool IsDirty
		{
			get { return SelectedVM.IsDirty; }
		}

		public MedikamentenverordnungslistenEditView(MedikamentenverordnungslisteListVM pListVm, MedikamentenverordnungslisteVM pMVLViewModel, List<MedArtDC> pPossibleMedArten, bool isInEditMode)
		{
			InitializeComponent();
			_IsInEditMode = isInEditMode;
			ViewModel = pListVm;
			SelectedVM = pMVLViewModel;
			DataContext = SelectedVM;
			MedArten = pPossibleMedArten;
		}

		private void VerordnungHinzufuegenClick(object sender, RoutedEventArgs e)
		{
			if (MedArtCBE.SelectedItem == null)
			{
				MessageBox.Show("Bitte wählen Sie eine MedArt aus", "Hinzufügen nicht möglich", MessageBoxButton.OK, MessageBoxImage.Warning);
				return;
			}

			var neueVerordnung = new MedikamentenverordnungDC
			{
				MedArt = MedArtCBE.SelectedItem as MedArtDC, 
				MedName = MedNameTE.Text, 
				Darreichungsform = DarrFormCBE.SelectedItem as DarreichungsformDC,
				Morgens = MorgensTE.Text.Equals("") ? 0 : Convert.ToDouble(MorgensTE.EditValue),
				Mittags = MittagsTE.Text.Equals("") ? 0 : Convert.ToDouble(MittagsTE.EditValue),
				Abends = AbendsTE.Text.Equals("") ? 0 : Convert.ToDouble(AbendsTE.EditValue),
				Nachts = NachtsTE.Text.Equals("") ? 0 : Convert.ToDouble(NachtsTE.EditValue),
				DepotMenge = DepotMengeTE.Text.Equals("") ? 0 : Convert.ToInt32(DepotMengeTE.EditValue), 
				DepotRhythmus = DepotRhythmusCBE.SelectedItem as DepotRhythmusDC, 
				DepotErsterTag = DepotErsterTagDE.EditValue as DateTime?, 
				DepotNaechsterTag = DepotNaechsterTagDE.EditValue as DateTime?, 
				Verordnungsdatum = VerordnungsdatumDE.EditValue as DateTime?,
				MedBemerkung = MedBemerkungTE.Text, 
				MedVerordnet = MedVerordnetTE.Text
			};

			SelectedVM.Medikamentenverordnungen.Add(neueVerordnung);

			MVGrid.RefreshData();
		}

		private void RemoveMVAusListeClick(object sender, RoutedEventArgs e)
		{
			var toRemove = MVGrid.GetCurrentValue<MedikamentenverordnungDC>();
			SelectedVM.Medikamentenverordnungen.Remove(toRemove);

			SaveBtn.IsEnabled = true;

			MVGrid.RefreshData();
		}

		protected override void Save()
		{
			if (IsDirty)
			{
				var dc = SelectedVM.CommitToDataContract();

				if (_IsInEditMode)
				{
					ServiceFacade.DoCustomerServiceAsync(cs => cs.UpdateMedikamentenverordnungsliste(dc));
				}
				else
				{
					dc.Notice = string.Format("{1}edikamentenverordnungsliste vom {0}", DateTime.Now.ToShortDateString(), (dc.MedListType ? "Bedarfsm" : "M"));
					ServiceFacade.DoCustomerServiceSync(cs => cs.InsertMedikamentenverordnungslisten(new List<MedikamentenverordnungslisteDC> { dc }));
				}
			}
		}
	}
}
