public static intersections intersects(TimeSlotModel a, TimeSlotModel b)
        {
            if (a.start == a.end() || b.start == b.end())
            {
                return(intersections.No_Intersect);
            }

            if (a.start <= b.start)
            {
                if (a.end() >= b.start && a.end() <= b.end())
                {
                    return(intersections.A_Before_B);
                }
                if (a.end() >= b.end())
                {
                    return(intersections.B_inside_A);
                }
            }
            else
            {
                if (b.end() >= a.start && b.end() <= a.end())
                {
                    return(intersections.B_Before_A);
                }
                if (b.end() >= a.end())
                {
                    return(intersections.A_inside_B);
                }
            }
            return(intersections.No_Intersect);
        }
        public void consolidateEvents()
        {
            while (startDate.Date < endDate.Date)
            {
                Console.WriteLine(startDate.ToString());
                addEvent(new UserEventModel
                {
                    timeSlot = new TimeSlotModel
                    {
                        start  = startDate,
                        length = dayStart
                    },
                    name      = "Null",
                    userId    = "6f2241ae-da64-4aa8-a414-308d8f900057",
                    meetingId = "6f2241ae-da64-4aa8-a414-308d8f900057"
                });
                var endLen = startDate.AddDays(1).Subtract(startDate.Add(dayEnd));
                addEvent(new UserEventModel
                {
                    timeSlot = new TimeSlotModel
                    {
                        start  = startDate.Add(dayEnd),
                        length = new TimeSpan(endLen.Hours, endLen.Minutes, endLen.Seconds)
                    },
                    name      = "Null",
                    userId    = "6f2241ae-da64-4aa8-a414-308d8f900057",
                    meetingId = "6f2241ae-da64-4aa8-a414-308d8f900057"
                });
                startDate = startDate.AddDays(1);
            }

            var tempEvents = (events.OrderByDescending(x => x.timeSlot.start)
                              .Select(x => x.timeSlot).ToList());

            /*foreach(TimeSlotModel t in tempEvents)
             * {
             *  if (t.start.TimeOfDay < dayStart)
             *  {
             *      t.start = t.start.Date.Add(dayStart);
             *  }
             *  if (t.end().TimeOfDay > dayEnd)
             *  {
             *      t.length = t.length - (t.end().TimeOfDay - dayEnd);
             *  }
             * }*/
            tempEvents.Reverse();
            bool delta = true;

            while (delta)
            {
                consolidatedEvents.Clear();
                consolidatedEvents.AddRange(tempEvents);
                tempEvents.Clear();
                delta = false;
                for (int i = 0; i < consolidatedEvents.Count; i++)
                {
                    var thisEvent = consolidatedEvents[i];
                    Console.WriteLine(thisEvent.ToString());
                    var nextEvent = i + 1 != consolidatedEvents.Count ? consolidatedEvents[i + 1] : null;
                    if (nextEvent != null)
                    {
                        var intersect = TimeSlotModel.intersects(thisEvent, nextEvent);

                        switch (intersect)
                        {
                        case TimeSlotModel.intersections.A_Before_B:
                            Console.WriteLine("A BEFORE B");
                            thisEvent.length = nextEvent.end() - thisEvent.start;
                            tempEvents.Add(thisEvent);
                            i++;     //Skip nextevent
                            delta = true;
                            break;

                        case TimeSlotModel.intersections.A_inside_B:
                            Console.WriteLine("A INSIDE B");
                            tempEvents.Add(nextEvent);
                            i++;
                            delta = true;
                            break;

                        case TimeSlotModel.intersections.B_Before_A:
                            Console.WriteLine("B BEFORE A");
                            thisEvent.length = thisEvent.end() - nextEvent.start;
                            thisEvent.start  = nextEvent.start;
                            tempEvents.Add(thisEvent);
                            i++;     //Skip nextevent
                            delta = true;
                            break;

                        case TimeSlotModel.intersections.B_inside_A:
                            Console.WriteLine("B INSIDE A");
                            tempEvents.Add(thisEvent);
                            i++;
                            delta = true;
                            break;

                        case TimeSlotModel.intersections.No_Intersect:
                            Console.WriteLine("NO INTERSECT");
                            tempEvents.Add(thisEvent);
                            break;
                        }
                    }
                    else if (thisEvent != null)
                    {
                        tempEvents.Add(thisEvent);
                    }
                }
            }
            createGaps();
        }