public async Task <ActionResult <AccessPeriod> > AddAccesPeriod(AccessPeriod accessPeriod)
        {
            var user = await context.Users.Where(u => u.UserId == GetUserIdFromClaim(User)).Include(u => u.Facilities).FirstOrDefaultAsync();

            if (user == null)
            {
                return(BadRequest("Incorrect user"));
            }

            Facility fac = user.Facilities.Where(f => f.FacilityId == accessPeriod.FacilityId).FirstOrDefault();

            if (fac == null)
            {
                return(BadRequest("User doesn't own that facility"));
            }

            if (!DataHelper.CheckTime(accessPeriod.StartHour ?? 0, accessPeriod.StartMinute ?? 0, accessPeriod.EndHour ?? 0, accessPeriod.EndHour ?? 0))
            {
                return(BadRequest("Incorrect time data"));
            }

            //get facility periods of day
            var facs = context.AccessPeriods.Where(a => a.FacilityId == accessPeriod.FacilityId).Where(a => a.DayOfWeek == accessPeriod.DayOfWeek).ToList();

            if (facs != null)
            {
                foreach (AccessPeriod a in facs)
                {
                    var f1 = new TimeSpan(accessPeriod.StartHour ?? 0, accessPeriod.StartMinute ?? 0, 0);
                    var t1 = new TimeSpan(accessPeriod.EndHour ?? 0, accessPeriod.EndMinute ?? 0, 0);
                    var f2 = new TimeSpan(a.StartHour ?? 0, a.StartMinute ?? 0, 0);
                    var t2 = new TimeSpan(a.EndHour ?? 0, a.EndMinute ?? 0, 0);
                    if (DataHelper.IsTimeOverlapping(f1, t1, f2, t2))
                    {
                        return(BadRequest("Time periods overlapping on existing ones"));
                    }
                }
            }
            accessPeriod.FromDate = DateTime.Now;
            accessPeriod.Facility = fac;

            context.AccessPeriods.Add(accessPeriod);
            await context.SaveChangesAsync();

            return(Ok(accessPeriod));
        }
        public static Reservation GetExistingOrEmpty(AccessPeriod accessPeriod, List <Reservation> booked, List <Reservation> inactive)
        {
            var      date      = DataHelper.Date.GetNextDayOfWeekDate(accessPeriod.DayOfWeek);
            DateTime startTime = new DateTime(date.Year, date.Month, date.Day, accessPeriod.StartHour ?? 0, accessPeriod.StartMinute ?? 0, 0);
            DateTime endTime   = new DateTime(date.Year, date.Month, date.Day, accessPeriod.EndHour ?? 0, accessPeriod.EndMinute ?? 0, 0);

            //Check if term already booked
            var res = booked.Where(r => r.StartTime == startTime && r.EndTime == endTime).FirstOrDefault();

            if (res != null)
            {
                return(res);
            }

            //Check if access period date expired
            if (!((accessPeriod.FromDate != null && accessPeriod.FromDate <= startTime) || (accessPeriod.ToDate != null && accessPeriod.ToDate > endTime)))
            {
                return(null);
            }

            //Check if collaps with inactive date
            foreach (var inact in inactive)
            {
                if (AreDatesCollapsing(inact, new Reservation()
                {
                    StartTime = startTime, EndTime = endTime
                }))
                {
                    return(inact);
                }
            }

            return(new Reservation()
            {
                StartTime = startTime,
                EndTime = endTime,
                Status = ReservationStatus.NotBooked,
                AccessPeriodId = accessPeriod.AccessPeriodId,
            });
        }