public AuditoriumSeating Allocate(SeatingOptionSuggested seatingOptionSuggested)
        {
            // Update the seat references in the Auditorium
            var newAuditorium = AllocateSeats(seatingOptionSuggested.Seats);

            return(newAuditorium);
        }
        public SeatingOptionSuggested SuggestSeatingOption(SuggestionRequest suggestionRequest)
        {
            var seatingOptionSuggested  = new SeatingOptionSuggested(suggestionRequest);
            var availableSeatsCompliant = Seats.SelectAvailableSeatsCompliant(suggestionRequest.PricingCategory);
            var rowSize = Seats.Count();

            var adjacentSeatsOfExpectedSize = availableSeatsCompliant.SelectAdjacentSeats(suggestionRequest.PartyRequested);

            var adjacentSeatsOrdered = adjacentSeatsOfExpectedSize.OrderByMiddleOfTheRow(rowSize);

            foreach (var adjacentSeats in adjacentSeatsOrdered)
            {
                seatingOptionSuggested.AddSeats(adjacentSeats);

                if (seatingOptionSuggested.MatchExpectation())
                {
                    return(seatingOptionSuggested);
                }
            }

            return(new SeatingOptionNotAvailable(suggestionRequest));
        }