/// <summary>
        /// Creates a new reservation and adds the room by the given ID including the studio
        /// and sets the start date to NOW and the end date to NOW+2hours.
        /// </summary>
        /// <param name="roomId">The ID of the room on which you want to make a reservation.</param>
        /// <returns>The new reservation.</returns>
        public ReservationViewModel NewReservation(int?roomId)
        {
            if (roomId == null)
            {
                return(null);
            }

            RehearsalRoom room = Rooms.FirstOrDefault(l => l.Id == roomId);

            ReservationViewModel reservation = new ReservationViewModel {
                Room = room
            };

            reservation.Day = DateTime.Today;

            reservation.StartHour = DateTime.Now.Hour + 1;

            reservation.EndHour = DateTime.Now.Hour + 3;

            return(reservation);
        }
        public async Task <bool> SaveReservationAsync(int?roomId, string userName, ReservationViewModel reservation) //ez csak a foglalás létrehozásánál hívódik meg
        {
            /*
             * ide hozzá kell majd írni hogy a reservationEqipmentPairs táblába bekerüljön a megfelelő elem
             */
            if (roomId == null || reservation == null)
            {
                return(false);
            }

            if (!Validator.TryValidateObject(reservation, new ValidationContext(reservation, null, null), null))
            {
                return(false);
            }

            DateTime start = reservation.Day.AddHours(reservation.StartHour);
            DateTime end   = reservation.Day.AddHours(reservation.EndHour);

            if (_reservationDateValidator.Validate(start, end, roomId.Value, "create", reservation.Id, reservation.Equipments) != ReservationDateError.None)
            {
                return(false);
            }

            User user = await _userManager.FindByNameAsync(userName);

            if (user == null)
            {
                return(false);
            }

            /*
             * List<Equipment> equipments = new List<Equipment>();
             *
             * foreach (var equipment in reservation.Equipments)
             * {
             *  if (equipment.Value)
             *  {
             *      Equipment e = _context.Equipments.FirstOrDefault(l => l.Name == equipment.Key);
             *      equipments.Add(e);
             *  }
             * }
             */
            _context.Reservations.Add(new Reservation
            {
                RehearsalRoomId = reservation.Room.Id,
                UserId          = user.Id,
                Start           = reservation.Day.AddHours(reservation.StartHour),
                End             = reservation.Day.AddHours(reservation.EndHour),
                BandName        = reservation.BandName
                                  //Equipments = equipments
                                  //remove equipments
            });

            try
            {
                _context.SaveChanges();
            }
            catch (Exception)
            {
                return(false);
            }

            int studioId = GetStudioByRoomId(reservation.Room.Id).Id;

            List <ReservationEquipmentPair> pairs = new List <ReservationEquipmentPair>();

            foreach (var eq in reservation.Equipments)
            {
                if (eq.Value == true) //ha ezt kibéreltük
                {
                    ReservationEquipmentPair pair = new ReservationEquipmentPair
                    {
                        StudioId      = studioId,
                        EquipmentId   = _context.Equipments.Where(l => l.StudioId == studioId).FirstOrDefault(l => l.Name == eq.Key).Id,
                        EquipmentName = eq.Key,
                        ReservationId = _context.Reservations.FirstOrDefault(l =>
                                                                             l.RehearsalRoomId == reservation.Room.Id &&
                                                                             l.UserId == user.Id &&
                                                                             l.BandName == reservation.BandName &&
                                                                             l.Start == reservation.Day.AddHours(reservation.StartHour) &&
                                                                             l.End == reservation.Day.AddHours(reservation.EndHour)).Id //somehow we have to find the last(?) added reservation
                    };
                }
            }

            foreach (var pair in pairs)
            {
                _context.ReservationEquipmentPairs.Add(pair);
            }

            try
            {
                _context.SaveChanges();
            }
            catch (Exception)
            {
                return(false);
            }

            return(true);
        }