public Event Choose(EventsList eventsList, double currentClockTime)
        {
            var lastExecutedEvent = eventsList.GetLastReturnedEvent();

            if (lastExecutedEvent != null && lastExecutedEvent.DependantEvent != null)
            {
                var nextEventToExecute = lastExecutedEvent.DependantEvent;
                eventsList.RemoveEvent(nextEventToExecute);
                eventsList.SetLastExecutedEvent(nextEventToExecute);

                return(nextEventToExecute);
            }
            else
            {
                INextEventChooserStrategy smallestTimestampStrategy = new NextEventChooserStrategySmallestTimestamp();

                var nextEventToExecute = smallestTimestampStrategy.Choose(eventsList, currentClockTime);
                eventsList.SetLastExecutedEvent(nextEventToExecute);

                return(nextEventToExecute);
            }
        }