/// <summary>
        /// Configures the push notifications.
        /// </summary>
        public static void ConfigurePushNotifications()
        {
            var demoMode = ConfigurationManager.AppSettings["ticketdesk:DemoModeEnabled"] ?? "false";

            if (!DatabaseConfig.IsDatabaseReady || demoMode.Equals("true", StringComparison.InvariantCultureIgnoreCase))
            {
                //disable if database hasn't been created, of if running in demo mode
                return;
            }

            //configuration supplied by the IoC configuration
            var context = DependencyResolver.Current.GetService <TdPushNotificationContext>();

            if (DatabaseConfig.IsFirstRunDemoRefreshEnabled())
            {
                DemoPushNotificationDataManager.SetupDemoPushNotificationData(context);
            }

            if (context.TicketDeskPushNotificationSettings.IsEnabled)
            {
                //TODO: poor man's detection of appropriate scheduler
                var siteName       = Environment.GetEnvironmentVariable("WEBSITE_SITE_NAME");
                var isAzureWebSite = !string.IsNullOrEmpty(siteName);
                if (!isAzureWebSite)
                {
                    InProcessPushNotificationScheduler.Start(context.TicketDeskPushNotificationSettings.DeliveryIntervalMinutes);
                }
                context.Dispose();//ensure that no one accidentally holds a reference to this in closure

                //register for static notifications created event handler
                TdDomainContext.NotificationsCreated += (sender, notifications) =>
                {
                    HostingEnvironment.QueueBackgroundWorkItem(ct =>
                    {
                        // ReSharper disable once EmptyGeneralCatchClause
                        try
                        {
                            var notificationIds = notifications.Select(n => n.EventId).ToArray();
                            var domainContext   = DependencyResolver.Current.GetService <TdDomainContext>();
                            var multiProject    = domainContext.Projects.Count() > 1;
                            //fetch these back and make sure all dependent entities we need are loaded
                            var notes = domainContext.TicketEventNotifications
                                        .Include(t => t.TicketEvent)
                                        .Include(t => t.TicketEvent.Ticket)
                                        .Include(t => t.TicketEvent.Ticket.Project)
                                        .Include(t => t.TicketSubscriber)
                                        .Where(t => notificationIds.Contains(t.EventId))
                                        .ToArray();

                            if (notes.Any())
                            {
                                using (var noteContext = new TdPushNotificationContext())
                                {
                                    var subscriberExclude =
                                        noteContext.TicketDeskPushNotificationSettings.AntiNoiseSettings
                                        .ExcludeSubscriberEvents;

                                    var noteEvents = notes.ToNotificationEventInfoCollection(subscriberExclude,
                                                                                             multiProject);

                                    noteContext.AddNotifications(noteEvents);

                                    noteContext.SaveChanges();
                                }
                            }
                        }
                        catch
                        {
                            //TODO: Log this somewhere
                        }
                    });
                };
            }
        }