using System;
using System.Collections.Generic;

using BeWo.Data.Access;
using BeWo.Data.Entities;

namespace BeWo.Report.ReportObjects
{
	public class MedVerListRO : AbstractBeWoReportObject<MedVerListRO>
	{
		private List<MedVerDetail> _MedVerDetailList  = new List<MedVerDetail>();
		private List<MedVerDetail> _MedVerDetailList2 = new List<MedVerDetail>();
		private List<MedVerDetail> _MedVerDetailList3 = new List<MedVerDetail>();
		private List<MedVerDetail> _MedVerDetailList4 = new List<MedVerDetail>();
		private List<MedVerDetail> _MedVerDetailList5 = new List<MedVerDetail>();
		private List<MedVerDetail> _MedVerDetailList6 = new List<MedVerDetail>();

		public String ErstellDatum   { get; set; }
		public String Ersteller      { get; set; }
		public String Klient         { get; set; }
		public bool MitZusatzfeldern { get; set; }
		public String Titel          { get; set; }

		public List<MedVerDetail> MedVerDetailList
		{
			get { return _MedVerDetailList; }
			set { _MedVerDetailList = value; }
		}

		public List<MedVerDetail> MedVerDetailList2
		{
			get { return _MedVerDetailList2; }
			set { _MedVerDetailList2 = value; }
		}

		public List<MedVerDetail> MedVerDetailList3
		{
			get { return _MedVerDetailList3; }
			set { _MedVerDetailList3 = value; }
		}

		public List<MedVerDetail> MedVerDetailList4
		{
			get { return _MedVerDetailList4; }
			set { _MedVerDetailList4 = value; }
		}

		public List<MedVerDetail> MedVerDetailList5
		{
			get { return _MedVerDetailList5; }
			set { _MedVerDetailList5 = value; }
		}

		public List<MedVerDetail> MedVerDetailList6
		{
			get { return _MedVerDetailList6; }
			set { _MedVerDetailList6 = value; }
		}

		public static MedVerListRO Create(long? mvlOid, bool mitZusatzfeldern = false)
		{
			var ro = new MedVerListRO();

			var mvl             = DAOFactory.GenericDAO.GetByID<Medikamentenverordnungsliste>(mvlOid.Value);
			ro.ErstellDatum     = mvl.InsTs.Value.ToShortDateString();
			ro.Ersteller        = mvl.InsUser;
			ro.Klient           = mvl.Customer.Person.FirstNameLastName;
			ro.MitZusatzfeldern = mitZusatzfeldern;
			ro.Titel            = mvl.MedListType ? "Bedarfsmedikamentenverordnung" : "Medikamentenverordnung";

			foreach (var mv in mvl.Medikamentenverordnungen)
			{
				var medVerDetail = new MedVerDetail
				{
					Morgens = Convert.ToDecimal(mv.Morgens).ToString(),
					Mittags = Convert.ToDecimal(mv.Mittags).ToString(),
					Abends = Convert.ToDecimal(mv.Abends).ToString(),
					Nachts = Convert.ToDecimal(mv.Nachts).ToString(),
					DepotMenge = Convert.ToDecimal(mv.DepotMenge).ToString(), 
					MedikamentenArt = mv.MedArt.Bezeichnung, 
					Darreichungsform = mv.Darreichungsform.Bezeichnung, 
					DepotRhythmus = mv.DepotRhythmus.Bezeichnung,
					DepotErsterTag = mv.DepotErsterTag.HasValue ? mv.DepotErsterTag.Value.ToShortDateString() : String.Empty,
					DepotNaechsterTag = mv.DepotNaechsterTag.HasValue ? mv.DepotNaechsterTag.Value.ToShortDateString() : String.Empty, 
					MedBemerkung = mv.MedBemerkung, 
					MedName = mv.MedName, 
					MedVerordnet = mv.MedVerordnet,
					Verordnungsdatum = mv.Verordnungsdatum.HasValue ? mv.Verordnungsdatum.Value.ToShortDateString() : String.Empty
				};

				switch (mv.MedArt.Bezeichnung)
				{
					case "PSY":
						ro.MedVerDetailList.Add(medVerDetail);
						break;
					case "BPS":
						ro.MedVerDetailList2.Add(medVerDetail);
						break;
					case "DPS":
						ro.MedVerDetailList3.Add(medVerDetail);
						break;
					case "SOM":
						ro.MedVerDetailList4.Add(medVerDetail);
						break;
					case "BSO":
						ro.MedVerDetailList5.Add(medVerDetail);
						break;
					case "DSO":
						ro.MedVerDetailList6.Add(medVerDetail);
						break;
				}
			}

			return ro;
		}
	}

	public class MedVerDetail
	{
		public String MedikamentenArt { get; set; }
		public String Darreichungsform { get; set; }
		public String Morgens { get; set; }
		public String Mittags { get; set; }
		public String Abends { get; set; }
		public String Nachts { get; set; }
		public String DepotMenge { get; set; }
		public String DepotRhythmus { get; set; }
		public String DepotErsterTag { get; set; }
		public String DepotNaechsterTag { get; set; }
		public String MedBemerkung { get; set; }
		public String MedName { get; set; }
		public String MedVerordnet { get; set; }
		public String Verordnungsdatum { get; set; }
	}
}
