//5.Given a birth can planned
        //a)Show the rooms reserved the birth
        //b)Show the clinicians assigned the birth
        private static void ShowRoomsAndClinicianReservedForBirth(BirthDbContext context)
        {
            Console.WriteLine(" - Hvilket BirthID søger du efter?");
            var input   = Console.ReadLine();
            var inputId = int.Parse(input);

            Birth birth =
                context.Birth

                .Include(b => b.Child)
                .ThenInclude(c => c.Mother)
                .ThenInclude(m => m.Reservations)
                .ThenInclude(r => r.ReservedRoom)
                .Include(b => b.Clinicians)
                .ThenInclude(b => b.Clinician)
                .SingleOrDefault(b => b.BirthId == inputId);

            Console.WriteLine("Fødsels ID: " + birth.BirthId + " Navn: " + birth.Child.FullName);
            Console.WriteLine(" Associeret personale:");
            foreach (var cb in birth.Clinicians)
            {
                Console.WriteLine("   " + cb.Clinician.FullName + " " + cb.Clinician.GetType().Name);
            }

            Console.WriteLine(" Reserverede rum: ");
            Child c = birth.Child;

            foreach (var r in c.Mother.Reservations)
            {
                Console.WriteLine("   " + r.ReservedRoom.RoomName + " med reservationsID: " + r.ReservationId);
            }
            Console.WriteLine("\n\n");
        }
        //4.Show the maternity rooms and the four hours rest rooms in use with the mother/parents and child/children using the room.
        private static void ShowMaternityRoomsAndRestingRoomsInUse(BirthDbContext context)
        {
            List <Reservation> maternityRoomsAndRestingRooms =
                context.Reservation
                .Where(r => r.ReservationStart < (DateTime.Now))
                .Where(r => r.ReservationEnd > (DateTime.Now))
                .Where(r => r.ReservedRoom is MaternityRoom || r.ReservedRoom is RestingRoom)
                .Include(r => r.ReservedRoom)
                .Include(r => r.User)
                .ThenInclude(m => m.Children)
                .ThenInclude(c => c.FamilyMembers)
                .ToList();

            foreach (var reservation in maternityRoomsAndRestingRooms)
            {
                Console.WriteLine(" - Rummet: "
                                  + reservation.ReservedRoom.RoomName
                                  + " er reserveret af " + reservation.User.FullName + " med reservationsID: " + reservation.ReservationId
                                  + ".\n Navn på børn: ");
                foreach (var c in reservation.User.Children)
                {
                    Console.WriteLine(c.FullName + ". ");
                    foreach (var fm in c.FamilyMembers)
                    {
                        Console.WriteLine(". \n Familiemedlem: " + fm.FullName + " Relation: " + fm.Relation);
                    }
                }
            }
            Console.WriteLine("\n\n");
        }
        private static void ShowPlannedBirths(BirthDbContext context)
        {
            //Show planned births for the coming three days
            List <Birth> plannedBirths =
                context.Birth
                .Where(b => b.PlannedStartTime < (DateTime.Now.AddDays(3)))
                .Where(b => b.PlannedStartTime > (DateTime.Now))
                .Include(b => b.Child)
                .Include(b => b.Clinicians)
                .ThenInclude(cb => cb.Clinician)
                .ToList();

            Console.WriteLine(" - Planlagte fødsler de kommende 3 dage:");
            foreach (var birth in plannedBirths)
            {
                Console.WriteLine("Fødsels ID: " + birth.BirthId + "\nPlanlagt starttidspunkt: "
                                  + birth.PlannedStartTime + "\nNavn: " + birth.Child.FullName);
                Console.WriteLine("Associeret personale: ");
                foreach (var cb in birth.Clinicians)
                {
                    Console.WriteLine("   " + cb.Clinician.FullName + " (" + cb.Clinician.GetType().Name + ")");
                }
            }
            Console.WriteLine("\n\n");
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Velkommen til BirthClinic Database access system :D");

            using (var context = new BirthDbContext())
            {
                context.Database.EnsureCreated();
                Console.WriteLine("Databasen eksisterer, og context er defineret");
                SeedData sd = new SeedData(context);


                while (_running)
                {
                    Console.WriteLine("Muligheder: ");
                    Console.WriteLine("1: Vis planlagte fødsler: ");
                    Console.WriteLine("2: Ledige rum og klinikarbejdere ");
                    Console.WriteLine("3: Aktuelt igangværende fødsler ");
                    Console.WriteLine("4: Værelser i brug lige nu (ikke fødselsrum)");
                    Console.WriteLine("5: Vis reserverede rum og associeret personale til specifik fødsel");
                    Console.WriteLine("F: Færdiggør reservation af rum ");
                    Console.WriteLine("B: Lav en reservation til en fødsel");
                    Console.WriteLine("A: Annuller reservation af rum ");
                    Console.WriteLine("x: Luk ");
                    var key = Console.ReadKey();
                    HandleKey(key, context);
                }
            }
        }
        private static void SeedMidwives(BirthDbContext db)
        {
            Person M1  = new MidWife("Mary");
            Person M2  = new MidWife("Malfred");
            Person M3  = new MidWife("Marius");
            Person M4  = new MidWife("Marianne");
            Person M5  = new MidWife("Morten");
            Person M6  = new MidWife("Marie");
            Person M7  = new MidWife("Molly");
            Person M8  = new MidWife("Mingming");
            Person M9  = new MidWife("Mulle");
            Person M10 = new MidWife("Mads");

            db.Add(M1);
            db.Add(M2);
            db.Add(M3);
            db.Add(M4);
            db.Add(M5);
            db.Add(M6);
            db.Add(M7);
            db.Add(M8);
            db.Add(M9);
            db.Add(M10);

            db.SaveChanges();
            Console.WriteLine("Midwives added.");
        }
        public static void SeedRooms(BirthDbContext db)
        {
            var r = db.Room.FirstOrDefault();

            if (r == null)
            {
                SeedMaternityRooms(db);
                SeedBirthRooms(db);
                SeedRestingRooms(db);
            }
        }
        private static void HandleKey(ConsoleKeyInfo key, BirthDbContext context)
        {
            switch (key.Key)
            {
            case ConsoleKey.D1:
            case ConsoleKey.NumPad1:
                ShowPlannedBirths(context);
                break;

            case ConsoleKey.D2:
            case ConsoleKey.NumPad2:
                ShowAvailableRoomsAndClinicians(context);
                break;

            case ConsoleKey.D3:
            case ConsoleKey.NumPad3:
                ShowOngoingBirths(context);
                break;

            case ConsoleKey.D4:
            case ConsoleKey.NumPad4:
                ShowMaternityRoomsAndRestingRoomsInUse(context);
                break;

            case ConsoleKey.D5:
            case ConsoleKey.NumPad5:
                ShowRoomsAndClinicianReservedForBirth(context);
                break;

            case ConsoleKey.X:
                _running = false;
                break;

            case ConsoleKey.F:
                FinnishRoomReservation(context);
                break;

            case ConsoleKey.B:
                AddBirth(context);
                break;

            case ConsoleKey.A:
                CancelRoomReservation(context);
                break;

            default:
                Console.WriteLine("Ugyldigt valg");
                break;
            }
        }
        // Ekstra. Vis alle rum
        private static void ShowAvailableRooms(BirthDbContext context, DateTime startTime, string roomType = "birthroom")
        {
            roomType = roomType.ToLower();
            List <Room> rooms = null;

            switch (roomType)
            {
            case "birthroom":
                rooms = context.Room
                        .Include(r => r.Reservations)
                        .Where(r => r is BirthRoom)
                        .ToList();
                break;

            case "maternityroom":
                rooms = context.Room
                        .Include(r => r.Reservations)
                        .Where(r => r is MaternityRoom)
                        .ToList();
                break;

            case "restingroom":
                rooms = context.Room
                        .Include(r => r.Reservations)
                        .Where(r => r is RestingRoom)
                        .ToList();
                break;
            }

            //print available rooms:
            Console.WriteLine("Ledige Rum:");

            foreach (var room in rooms)
            {
                bool booked = false;
                foreach (var reservation in room.Reservations)
                {
                    if (reservation.ReservationStart < startTime + TimeSpan.FromHours(5) && reservation.ReservationEnd > startTime)
                    //Remove room from list
                    {
                        booked = true;
                        break;
                    }
                }
                if (!booked)
                {
                    Console.WriteLine(room.RoomId + ": " + room.GetType().Name + " " + room.RoomName);
                }
            }
        }
        private static void SeedMaternityRooms(BirthDbContext db)
        {
            Room m1  = new MaternityRoom("M1");
            Room m2  = new MaternityRoom("M2");
            Room m3  = new MaternityRoom("M3");
            Room m4  = new MaternityRoom("M4");
            Room m5  = new MaternityRoom("M5");
            Room m6  = new MaternityRoom("M6");
            Room m7  = new MaternityRoom("M7");
            Room m8  = new MaternityRoom("M8");
            Room m9  = new MaternityRoom("M9");
            Room m10 = new MaternityRoom("M10");
            Room m11 = new MaternityRoom("M11");
            Room m12 = new MaternityRoom("M12");
            Room m13 = new MaternityRoom("M13");
            Room m14 = new MaternityRoom("M14");
            Room m15 = new MaternityRoom("M15");
            Room m16 = new MaternityRoom("M16");
            Room m17 = new MaternityRoom("M17");
            Room m18 = new MaternityRoom("M18");
            Room m19 = new MaternityRoom("M19");
            Room m20 = new MaternityRoom("M20");
            Room m21 = new MaternityRoom("M21");
            Room m22 = new MaternityRoom("M22");

            db.Add(m1);
            db.Add(m2);
            db.Add(m3);
            db.Add(m4);
            db.Add(m5);
            db.Add(m6);
            db.Add(m7);
            db.Add(m8);
            db.Add(m9);
            db.Add(m10);
            db.Add(m11);
            db.Add(m12);
            db.Add(m13);
            db.Add(m14);
            db.Add(m15);
            db.Add(m16);
            db.Add(m17);
            db.Add(m18);
            db.Add(m19);
            db.Add(m20);
            db.Add(m21);
            db.Add(m22);
            db.SaveChanges();
            Console.WriteLine("MaternityRooms Added");
        }
        private static void SeesSecretary(BirthDbContext db)
        {
            Person s1 = new Secretary("Susan");
            Person s2 = new Secretary("Simon");
            Person s3 = new Secretary("Sam");
            Person s4 = new Secretary("Susanne");

            db.Add(s1);
            db.Add(s2);
            db.Add(s3);
            db.Add(s4);

            db.SaveChanges();
            Console.WriteLine("Secretaries added.");
        }
        private static void SeedNurses(BirthDbContext db)
        {
            Person N1  = new Nurse("Nete");
            Person N2  = new Nurse("Nathan");
            Person N3  = new Nurse("Natalie");
            Person N4  = new Nurse("Noel");
            Person N5  = new Nurse("Nadja");
            Person N6  = new Nurse("Nessa");
            Person N7  = new Nurse("Naja");
            Person N8  = new Nurse("Nikoline");
            Person N9  = new Nurse("Nik");
            Person N10 = new Nurse("Nikolaj");
            Person N11 = new Nurse("Niklas");
            Person N12 = new Nurse("Nor");
            Person N13 = new Nurse("Nazarat");
            Person N14 = new Nurse("Neo");
            Person N15 = new Nurse("Nasir");
            Person N16 = new Nurse("Niller");
            Person N17 = new Nurse("Niko");
            Person N18 = new Nurse("Niels");
            Person N19 = new Nurse("Niels-Erik");
            Person N20 = new Nurse("Niels-Ove");


            db.Add(N1);
            db.Add(N2);
            db.Add(N3);
            db.Add(N4);
            db.Add(N5);
            db.Add(N6);
            db.Add(N7);
            db.Add(N8);
            db.Add(N9);
            db.Add(N10);
            db.Add(N11);
            db.Add(N12);
            db.Add(N13);
            db.Add(N14);
            db.Add(N15);
            db.Add(N16);
            db.Add(N17);
            db.Add(N18);
            db.Add(N19);
            db.Add(N20);

            db.SaveChanges();
            Console.WriteLine("Nurses added.");
        }
        private static void CancelRoomReservation(BirthDbContext context)
        {
            int id  = inputID();
            var res = context.Reservation.Single(r => r.ReservationId == id);

            if (res != null)
            {
                Console.WriteLine("Reservation fundet. Fjernes nu");
                context.Remove <Reservation>(res);
                context.SaveChanges();
            }
            else
            {
                Console.WriteLine("Kunne ikke finde reservation. Intet er fjernet.");
            }
        }
        private static void SeedRestingRooms(BirthDbContext db)
        {
            Room r1 = new RestingRoom("R1");
            Room r2 = new RestingRoom("R2");
            Room r3 = new RestingRoom("R3");
            Room r4 = new RestingRoom("R4");
            Room r5 = new RestingRoom("R5");

            db.Add(r1);
            db.Add(r2);
            db.Add(r3);
            db.Add(r4);
            db.Add(r5);
            db.SaveChanges();
            Console.WriteLine("Resting rooms added.");
        }
        private static void SeedSHAssistans(BirthDbContext db)
        {
            Person SHA1  = new SocialHealthAssistant("Harry");
            Person SHA2  = new SocialHealthAssistant("Harper");
            Person SHA3  = new SocialHealthAssistant("Hans");
            Person SHA4  = new SocialHealthAssistant("Hope");
            Person SHA5  = new SocialHealthAssistant("Harriet");
            Person SHA6  = new SocialHealthAssistant("Hal");
            Person SHA7  = new SocialHealthAssistant("Hamlet");
            Person SHA8  = new SocialHealthAssistant("Hubert");
            Person SHA9  = new SocialHealthAssistant("Holger");
            Person SHA10 = new SocialHealthAssistant("Holmer");
            Person SHA11 = new SocialHealthAssistant("Hansi");
            Person SHA12 = new SocialHealthAssistant("Hylle");
            Person SHA13 = new SocialHealthAssistant("Henrik");
            Person SHA14 = new SocialHealthAssistant("Hermione");
            Person SHA15 = new SocialHealthAssistant("Heidi");
            Person SHA16 = new SocialHealthAssistant("Helene");
            Person SHA17 = new SocialHealthAssistant("Helena");
            Person SHA18 = new SocialHealthAssistant("Hailey");
            Person SHA19 = new SocialHealthAssistant("Henriette");
            Person SHA20 = new SocialHealthAssistant("Hanne");

            db.Add(SHA1);
            db.Add(SHA2);
            db.Add(SHA3);
            db.Add(SHA4);
            db.Add(SHA5);
            db.Add(SHA6);
            db.Add(SHA7);
            db.Add(SHA8);
            db.Add(SHA9);
            db.Add(SHA10);
            db.Add(SHA11);
            db.Add(SHA12);
            db.Add(SHA13);
            db.Add(SHA14);
            db.Add(SHA15);
            db.Add(SHA16);
            db.Add(SHA17);
            db.Add(SHA18);
            db.Add(SHA19);
            db.Add(SHA20);

            db.SaveChanges();
            Console.WriteLine("Social and Health Assistans added.");
        }
        private static void SeedDoctors(BirthDbContext db)
        {
            Person D1 = new Doctor("Dorthe");
            Person D2 = new Doctor("Dennis");
            Person D3 = new Doctor("Dina");
            Person D4 = new Doctor("Daniel");
            Person D5 = new Doctor("Daniella");

            db.Add(D1);
            db.Add(D2);
            db.Add(D3);
            db.Add(D4);
            db.Add(D5);

            db.SaveChanges();
            Console.WriteLine("Doctors added.");
        }
        public static void SeedStaff(BirthDbContext db)
        {
            var c = db.Clinicians.FirstOrDefault();

            if (c == null)
            {
                SeedDoctors(db);
                SeedNurses(db);
                SeedMidwives(db);
                SeedSHAssistans(db);
            }

            var s = db.Secretary.FirstOrDefault();

            if (s == null)
            {
                SeesSecretary(db);
            }
        }
        private static void FinnishRoomReservation(BirthDbContext context)
        {
            int id = inputID();


            Reservation res = context.Reservation
                              .SingleOrDefault(r => r.ReservationId == id);

            if (res != null)
            {
                res.ReservationEnd = DateTime.Now;
                context.SaveChanges();
                Console.WriteLine("Succes. Reservationen er nu markeret som 'færdig'!");
            }
            else
            {
                Console.WriteLine("Reservation ikke fundet.");
                FinnishRoomReservation(context);
            }
        }
        //Show the at current time ongoing births with information about the birth, parents, clinicians associated and the birth room.
        private static void ShowOngoingBirths(BirthDbContext context)
        {
            List <Reservation> reservations =
                context.Reservation
                .Where(reservation => reservation.ReservedRoom is BirthRoom)
                .Where(r => r.ReservationStart < DateTime.Now)
                .Where(r => r.ReservationEnd > DateTime.Now)//Assuming current reservations of birthrooms is current births
                .Include(r => r.ReservedRoom)
                .Include(r => r.User)
                .ThenInclude(u => u.Children)
                .ThenInclude(c => c.FamilyMembers)
                .ToList();

            Console.WriteLine("Nuværende føderum i brug:");
            foreach (Reservation res in reservations)
            {
                Console.WriteLine(res.ReservedRoom.RoomName);
                foreach (var child in res.User.Children)
                {
                    Console.WriteLine("Barnets navn: " + child.FullName + " Morens navn: " + child.Mother.FullName + " Familie:");
                    foreach (var member in child.FamilyMembers)
                    {
                        Console.WriteLine("  " + member.Relation + ": " + member.FullName);
                    }

                    var birth = context.Birth
                                .Include(b => b.Clinicians)
                                .ThenInclude(c => c.Clinician)
                                .Single(b => b.Child.PersonId == child.PersonId);
                    Console.WriteLine(" Associeret personale til fødselsID " + birth.BirthId + ":");
                    foreach (var cb in birth.Clinicians)
                    {
                        Console.WriteLine("  " + cb.Clinician.GetType().Name + ": " + cb.Clinician.FullName);
                    }
                }
            }
            Console.WriteLine("\n\n");
        }
        private static void SeedBirthRooms(BirthDbContext db)
        {
            Room b1  = new BirthRoom("B1");
            Room b2  = new BirthRoom("B2");
            Room b3  = new BirthRoom("B3");
            Room b4  = new BirthRoom("B4");
            Room b5  = new BirthRoom("B5");
            Room b6  = new BirthRoom("B6");
            Room b7  = new BirthRoom("B7");
            Room b8  = new BirthRoom("B8");
            Room b9  = new BirthRoom("B9");
            Room b10 = new BirthRoom("B10");
            Room b11 = new BirthRoom("B11");
            Room b12 = new BirthRoom("B12");
            Room b13 = new BirthRoom("B13");
            Room b14 = new BirthRoom("B14");
            Room b15 = new BirthRoom("B15");

            db.Add(b1);
            db.Add(b2);
            db.Add(b3);
            db.Add(b4);
            db.Add(b5);
            db.Add(b6);
            db.Add(b7);
            db.Add(b8);
            db.Add(b9);
            db.Add(b10);
            db.Add(b11);
            db.Add(b12);
            db.Add(b13);
            db.Add(b14);
            db.Add(b15);

            db.SaveChanges();
            Console.WriteLine("Birth Rooms Added");
        }
 public SeedData(BirthDbContext db)
 {
     SeedRooms(db);
     SeedStaff(db);
 }
        private static void ShowAvailableRoomsAndClinicians(BirthDbContext context)
        {
            // Show clinicians, birth room and available at the clinic for the next five days
            List <Room> rooms =
                context.Room
                .Include(r => r.Reservations)

                .ToList();

            Console.WriteLine("Ledige Rum:");

            foreach (var room in rooms)
            {
                bool booked = false;
                foreach (var reservation in room.Reservations)
                {
                    if (reservation.ReservationStart < DateTime.Now + TimeSpan.FromDays(5) && //Reservation starter inden for 5 dage
                        reservation.ReservationEnd > DateTime.Now)
                    {
                        ;                                         //...og slutter en gang i fremtiden
                    }
                    //Remove room from list
                    {
                        booked = true;
                        break;
                    }
                }
                if (!booked)
                {
                    Console.WriteLine(room.RoomId + ": " + room.GetType().Name + " " + room.RoomName);
                }
            }

            List <Clinician> clinicians =
                context.Clinicians
                .Include(c => c.AssociatedBirths)
                .ThenInclude(x => x.Birth)
                .ToList();


            //Print available clinicians:
            Console.WriteLine("\n\nLedige Klinikarbejdere:");

            foreach (var clinician in clinicians)
            {
                bool booked = false;
                foreach (var birth in clinician.AssociatedBirths)
                {
                    if (birth.Birth.PlannedStartTime < DateTime.Now + TimeSpan.FromDays(5) &&
                        birth.Birth.PlannedStartTime > DateTime.Now)
                    {//If booked for at birth the next 5 days
                        booked = true;
                        break;
                    }
                }
                if (!booked)
                {
                    Console.WriteLine(clinician.PersonId + " " + clinician.FullName + ": " + clinician.GetType().Name);
                }
            }
            Console.WriteLine("\n\n");
        }
        public static void AddBirth(BirthDbContext context)
        {
            // Til når brugeren skal vælge doctor og midwife.
            List <Doctor>  doctors  = context.Doctor.ToList();
            List <MidWife> midWives = context.MidWife.ToList();

            Console.WriteLine("Velkommen til reservation af fødsel");
            Console.WriteLine("-----------------------------------");

            Console.WriteLine("Hvad er navnet på barnet");
            string childName = Console.ReadLine();

            Console.WriteLine("Hvad er navnet på moderen til barnet");
            string motherName = Console.ReadLine();

            Console.WriteLine("Hvad er navnet på faderen til barnet");
            string fatherName = Console.ReadLine();

            Console.WriteLine("Hvilken dato vil du have reservationen til. Skriv på formen DD/MM/ÅÅÅÅ");
            string dato = Console.ReadLine();

            string[] datoOpsplittet = dato.Split("/");
            int      dag            = int.Parse(datoOpsplittet[0]);
            int      måned          = int.Parse(datoOpsplittet[1]);
            int      år             = int.Parse(datoOpsplittet[2]);

            Console.WriteLine("Hvilken tid vil du have reservationen. Skriv på formen TT.MM");
            string tid = Console.ReadLine();

            string[] tidOpsplittet = tid.Split(".");
            int      time          = int.Parse(tidOpsplittet[0]);
            int      minut         = int.Parse(tidOpsplittet[1]);

            Console.WriteLine("Hvilken jordmor vil du gerne have? Indtast tallet ud fra personen");
            int counter = 0;

            foreach (MidWife mW in midWives)
            {
                Console.WriteLine(counter + ". " + mW.FullName);
                counter++;
            }

            int valgtMidwife = int.Parse(Console.ReadLine());

            Console.WriteLine("Hvilken doktor vil du gerne have? Indtast tallet ud fra personen");
            counter = 0;
            foreach (Doctor dc in doctors)
            {
                Console.WriteLine(counter + ". " + dc.FullName);
                counter++;
            }

            int valgtDoctor = int.Parse(Console.ReadLine());

            Console.WriteLine("Du skal også have et fødselsrum reserveret, Vi finder ledige rum for dagen. \n Indtast tallet ud fra rummet");
            ShowAvailableRooms(context, new DateTime(år, måned, dag, time, minut, 00), "birthroom");
            int  valgtRumId      = int.Parse(Console.ReadLine());
            Room chosenBirthRoom = context.Room.SingleOrDefault(r => r.RoomId == valgtRumId);

            Console.WriteLine("Vil du også reservere et Maternityroom y/n");
            Room chosenMaternityRoom = null;

            if (Console.ReadLine().ToLower() == "y")
            {
                Console.WriteLine("MaternityRoom reservation \n Indtast tallet ud fra rummet");
                ShowAvailableRooms(context, new DateTime(år, måned, dag, time, minut, 00), "maternityroom");
                valgtRumId          = int.Parse(Console.ReadLine());
                chosenMaternityRoom = context.Room.SingleOrDefault(r => r.RoomId == valgtRumId);
            }
            Console.WriteLine("Vil du også reservere et restingroom y/n");
            Room chosenRestingRoom = null;

            if (Console.ReadLine().ToLower() == "y")
            {
                Console.WriteLine("RestingRoom reservation \n Indtast tallet ud fra rummet");
                ShowAvailableRooms(context, new DateTime(år, måned, dag, time, minut, 00), "restingroom");
                valgtRumId        = int.Parse(Console.ReadLine());
                chosenRestingRoom = context.Room.SingleOrDefault(r => r.RoomId == valgtRumId);
            }

            Console.WriteLine("Tak for dit info, vores super database vil nu oprette reservationen for dig");

            // Følgende kode opsætter de rigtige referencer m.m. Så dataen kan gemmes på databasen
            // Her oprettes de forskellige klasser
            Child        child1  = new Child(childName);
            Birth        birth1  = new Birth();
            Mother       mother1 = new Mother(motherName);
            FamilyMember father1 = new FamilyMember(fatherName, "Father");

            // Savechanges skal kaldes allerede nu, da child skal laves før birth ellers så kan EF core ikke finde ud af hvilken den skal lave først.
            context.Add(child1);
            context.SaveChanges();

            // Her sættes referencer
            birth1.Child = child1;
            DateTime PST = new DateTime(år, måned, dag, time, minut, 00);

            birth1.PlannedStartTime = PST;
            //child1.Birth = birth1;
            child1.Mother        = mother1;
            child1.FamilyMembers = new List <FamilyMember>();
            child1.FamilyMembers.Add(father1);
            mother1.Children = new List <Child>();
            mother1.Children.Add(child1);

            // Her sættes clinicians og deres births
            ClinicianBirth CB1 = new ClinicianBirth();

            CB1.Birth     = birth1;
            CB1.Clinician = doctors[valgtDoctor];
            ClinicianBirth CB2 = new ClinicianBirth();

            CB2.Birth     = birth1;
            CB2.Clinician = midWives[valgtMidwife];
            doctors[valgtDoctor].AssociatedBirths = new List <ClinicianBirth>();
            doctors[valgtDoctor].AssociatedBirths.Add(CB1);
            midWives[valgtMidwife].AssociatedBirths = new List <ClinicianBirth>();
            midWives[valgtMidwife].AssociatedBirths.Add(CB2);
            // Her sættes clinicians på selve birth
            birth1.Clinicians = new List <ClinicianBirth>();
            birth1.Clinicians.Add(CB1);
            birth1.Clinicians.Add(CB2);
            //


            // Her sættes reservationerne for alle rum.
            Reservation res1 = new Reservation();

            res1.ReservationStart        = new DateTime(år, måned, dag, time, minut, 00);
            res1.ReservationEnd          = res1.ReservationStart + TimeSpan.FromHours(5);
            res1.User                    = mother1;
            res1.ReservedRoom            = chosenBirthRoom;
            mother1.Reservations         = new List <Reservation>();
            chosenBirthRoom.Reservations = new List <Reservation>();
            mother1.Reservations.Add(res1);
            chosenBirthRoom.Reservations.Add(res1);

            Reservation res2 = new Reservation();

            if (chosenMaternityRoom != null)
            {
                res2.ReservationStart            = new DateTime(år, måned, dag, time, minut, 00);
                res2.ReservationEnd              = res2.ReservationStart + TimeSpan.FromDays(5);
                res2.User                        = mother1;
                res2.ReservedRoom                = chosenMaternityRoom;
                chosenMaternityRoom.Reservations = new List <Reservation>();
                mother1.Reservations.Add(res2);
                chosenMaternityRoom.Reservations.Add(res2);
            }

            Reservation res3 = new Reservation();

            if (chosenRestingRoom != null)
            {
                res3.ReservationStart          = new DateTime(år, måned, dag, time, minut, 00) + TimeSpan.FromHours(5);
                res3.ReservationEnd            = res3.ReservationStart + TimeSpan.FromHours(4);
                res3.User                      = mother1;
                res3.ReservedRoom              = chosenRestingRoom;
                chosenRestingRoom.Reservations = new List <Reservation>();
                mother1.Reservations.Add(res3);
                chosenRestingRoom.Reservations.Add(res3);
            }
            // Alt gemmes og reservationen er gemmenført
            context.SaveChanges();

            Console.WriteLine($"Reservation til den {dato}, med personerne {childName}, {motherName} og {fatherName} er gennemført og gemt");
        }