internal void Add30Patients()
        {
            using (var context = new KrankenhausSjukhusetDbContext())
            {
                var patientCreator = new PatientCreator();
                var newPatients    = patientCreator.GetMultiplePatients(30, context.Patients.Count());

                context.Patients.AddRange(newPatients);
                context.SaveChanges();
            }
        }
        internal void UpdatePatientStatus()
        {
            while (run)
            {
                Thread.Sleep(500);

                int recoveredPatientsCount = 0, deadPatientsCount = 0;

                using (var context = new KrankenhausSjukhusetDbContext())
                {
                    int numberOfIllPatients = context.Patients.Where(p => p.IllnessLevel > 0 && p.IllnessLevel < 10).Count(); //antalet sjuka personer

                    //kollar hur många patienter som ligger inne eller befinner sig i kön
                    if (numberOfIllPatients == 0)
                    {
                        run = false;
                        return; //tråden och programmet avlutas, corona is no more
                    }

                    var allPatients = (from p in context.Patients
                                       where p.StatusID == 1 || p.StatusID == 2 || p.StatusID == 3
                                       select p).ToList();

                    foreach (var p in allPatients)
                    {
                        if (p.IllnessLevel <= 0)
                        {
                            p.StatusID = 4; //tillfrisknad :)
                            recoveredPatientsCount++;
                        }
                        else if (p.IllnessLevel >= 10)
                        {
                            p.StatusID = 5; //rip
                            deadPatientsCount++;
                        }
                    }

                    context.SaveChanges();
                }

                var stats = new RecoveredAndDeathsStatisiticsEventArgs(recoveredPatientsCount, deadPatientsCount);
                RecoveredAndDeathsEventSender(stats);
            }
        }
        internal void MovePatients() //flyttar från kön till iva framtills iva är fullt (5)
        {
            bool movePatients = true;

            while (movePatients)
            {
                Thread.Sleep(500);

                //håller räkningen på antalet som flyttat till iva och/eller sanotorium
                int movedToIva        = 0;
                int movedToSanotorium = 0;

                using (var context = new KrankenhausSjukhusetDbContext())
                {
                    var mostILL = (from m in context.Patients
                                   where m.StatusID.Equals(1) || m.StatusID.Equals(2)
                                   orderby m.IllnessLevel descending, m.Age descending
                                   select m).ToList();                                       //most ill = sjukast i kön och sanotorium

                    int ivaCount     = context.Patients.Where(p => p.StatusID == 3).Count(); //antal personer i iva
                    int ivaSpotsLeft = 5 - ivaCount;

                    //flyttar till iva om det finns platser kvar i iva och patienter i kön eller sanotorium
                    for (int i = 0; i < ivaSpotsLeft && i < mostILL.Count(); i++)
                    {
                        mostILL[i].StatusID = 3;
                        movedToIva++;
                    }

                    var queue = (from p in context.Patients
                                 where p.StatusID.Equals(1)
                                 orderby p.IllnessLevel descending, p.Age
                                 select p).ToList();

                    int sanCount = context.Patients.Where(p => p.StatusID == 2).Count();

                    //10 är maximalkapaciteten för sanotoriumet
                    int sanSpotsLeft = 10 - sanCount;



                    for (int i = 0; i < sanSpotsLeft && queue.Count > i; i++)
                    {
                        queue[i].StatusID = 2;
                        movedToSanotorium++;
                    }


                    //skickar ut statistik till eventinvokermetoden
                    var stats = new MoveStatisticsEventargs(movedToIva, movedToSanotorium);
                    MovedEventSender(stats);

                    //kollar hur många patienter som finns kvar i sanotoriumet och kön
                    int queueAndSanCount = context.Patients.Where(p => p.StatusID == 1 || p.StatusID == 2).Count();
                    if (queueAndSanCount == 0)
                    {
                        movePatients = false;   //kör inte loopen igen om det inte finns några kvar att flytta
                    }
                    context.SaveChanges();
                }
            }
        }
        internal void RandomizePatientsIllnessLevel(Random rdm)
        {
            while (run)
            {
                Thread.Sleep(300);

                using (var context = new KrankenhausSjukhusetDbContext())
                {
                    var queue = (from p in context.Patients
                                 where p.StatusID == 1
                                 select p).ToList();

                    var sanotorium = (from p in context.Patients
                                      where p.StatusID == 2
                                      select p).ToList();

                    var iva = (from p in context.Patients
                               where p.StatusID == 3
                               select p).ToList();

                    int percentage;

                    foreach (var p in queue)
                    {
                        percentage = rdm.Next(1, 101); //randomerar procenten

                        if (percentage <= 50)
                        {
                            p.IllnessLevel += 0;
                        }
                        else if (percentage <= 60)
                        {
                            p.IllnessLevel -= 1;
                        }
                        else if (percentage <= 90)
                        {
                            p.IllnessLevel += 1;
                        }
                        else if (percentage <= 100)
                        {
                            p.IllnessLevel += 3;
                        }
                    }

                    foreach (var p in sanotorium)
                    {
                        percentage = rdm.Next(1, 101);

                        if (percentage <= 65)
                        {
                            p.IllnessLevel += 0;
                        }
                        else if (percentage <= 85)
                        {
                            p.IllnessLevel -= 1;
                        }
                        else if (percentage <= 95)
                        {
                            p.IllnessLevel += 1;
                        }
                        else if (percentage <= 100)
                        {
                            p.IllnessLevel += 3;
                        }
                    }

                    foreach (var p in iva)
                    {
                        percentage = rdm.Next(1, 101);

                        if (percentage <= 20)
                        {
                            p.IllnessLevel += 0;
                        }
                        else if (percentage <= 80)
                        {
                            p.IllnessLevel -= 3;
                        }
                        else if (percentage <= 90)
                        {
                            p.IllnessLevel += 1;
                        }
                        else if (percentage <= 100)
                        {
                            p.IllnessLevel += 3;
                        }
                    }

                    context.SaveChanges();
                }
            }
        }