private void Add()
        {
            ConsoleIO.DisplayLine("*** Add Reservation ***");

            //get the host list and resrvations
            Result <List <Reservation> > reservationsResult = GetReservations();

            ConsoleIO.DisplayStatus(reservationsResult.Success, reservationsResult.Messages);

            if (reservationsResult.Success)
            {
                ConsoleIO.DisplayReservationList(reservationsResult.Value);
            }
            else
            {
                return;
            }

            //instantiate a host
            Host host = reservationsResult.Value.FirstOrDefault().Host;

            //get guest & instantiate
            string         guestEmail  = ConsoleIO.PromptString("Enter guest email", false);
            Result <Guest> guestResult = reservationService.FindGuestByEmail(guestEmail);


            if (!guestResult.Success)
            {
                ConsoleIO.DisplayStatus(guestResult.Success, guestResult.Messages);
                return;
            }
            else
            {
                ConsoleIO.DisplayLine("Guest found");
                ConsoleIO.DisplayLine("");
            }
            Guest guest = guestResult.Value;

            //get start date (required)
            DateTime startDate = ConsoleIO.PromptDateTime("Reservation start date", false);
            //get end date (required)
            DateTime endDate = ConsoleIO.PromptDateTime("Reservation end date", false);

            //perform Create and display result
            Reservation toAdd = new Reservation
            {
                StartDate = startDate,
                EndDate   = endDate,
                Guest     = guest,
                Host      = host
            };

            toAdd.SetTotal();

            ConsoleIO.DisplayReservationSummary(toAdd);
            if (!ConsoleIO.PromptYesNo())
            {
                ConsoleIO.DisplayLine("Reservation was not added");
                return;
            }

            Result <Reservation> createResult = reservationService.Create(toAdd);

            ConsoleIO.DisplayStatus(createResult.Success, createResult.Messages);

            if (createResult.Success)
            {
                ConsoleIO.DisplayLine($"Reservation with ID {createResult.Value.ID} created");
            }
        }
        private void Update()
        {
            ConsoleIO.DisplayLine("*** Update Reservation ***");

            //get host list and reservations
            Result <List <Reservation> > reservationsResult = GetReservations();

            ConsoleIO.DisplayStatus(reservationsResult.Success, reservationsResult.Messages);

            if (reservationsResult.Success)
            {
                ConsoleIO.DisplayReservationList(reservationsResult.Value);
            }
            else
            {
                return;
            }

            //get id to edit
            Reservation original = null;

            do
            {
                int idToEdit = ConsoleIO.PromptInt("Enter the ID of the Reservation you want to edit");
                original = reservationsResult.Value.Find(r => r.ID == idToEdit);
            } while (original == null);

            ConsoleIO.DisplayLine($"\n** Editing Reservation {original.ID} **");

            //prompt new start date (or enter to keep)
            DateTime newStart = ConsoleIO.PromptDateTime($"New start ({original.StartDate:d})", true);
            //prompt new end date (or enter to keep)
            DateTime newEnd = ConsoleIO.PromptDateTime($"New end ({original.EndDate:d})", true);

            //instantiate a host
            Host host = original.Host;

            //set up Reservation, show summary and confirm correct
            Reservation toUpdate = new Reservation
            {
                Host  = host,
                Guest = original.Guest
            };

            toUpdate.StartDate = newStart == default(DateTime) ? original.StartDate :  newStart; //if PromptDateTime returned the default,
                                                                                                 //we know user wants it the same.
            toUpdate.EndDate = newEnd == default(DateTime) ? original.EndDate : newEnd;
            toUpdate.SetTotal();

            ConsoleIO.DisplayReservationSummary(toUpdate);
            if (!ConsoleIO.PromptYesNo())
            {
                ConsoleIO.DisplayLine("Reservation was not updated");
                return;
            }

            //perform Update and display result
            toUpdate.ID = original.ID;
            var result = reservationService.Update(original.ID, toUpdate);

            ConsoleIO.DisplayStatus(result.Success, result.Messages);
            if (result.Success)
            {
                ConsoleIO.DisplayLine($"Reservation with ID {result.Value.ID} was updated");
            }
        }