public Reservation MakeReservation(ReservationRequest request)
        {
            var freeSeats = _seatService.GetAvailableSeats(request.TrainId);

            if (!CanFillTrainWith(request.SeatCount, freeSeats.Count))
            {
                return(null);
            }

            var orderedSeats  = freeSeats.OrderBy(x => x.Coach).ThenBy(x => x.SeatNumber).ToList();
            var reservedSeats = new List <Seat>();
            var coachs        = orderedSeats.GroupBy(x => x.Coach);

            foreach (var seat in coachs)
            {
                if (SeatsInCoachAreAvailable(request.SeatCount, seat.Count()))
                {
                    reservedSeats = seat.ToList().GetRange(0, request.SeatCount);
                    _seatService.ConfirmReservation(reservedSeats);
                    return(new Reservation(request.TrainId, _bookingService.GetBookingId(), reservedSeats));
                }
            }

            return(null);
        }