private (int count, Duration duration) GatherProgrammeUnplacedSpotsDuration(
            IProgrammeForBreakAvailCalculation programme,
            IEnumerable <ISpotForBreakAvailCalculation> spots)
        {
            int      count = 0;
            Duration unplacedSpotDuration = Duration.Zero;

            foreach (var spot in spots.Where(spot => programme.DateTimeIsInProgramme(spot.StartDateTime) && !spot.IsBooked))
            {
                ++count;
                unplacedSpotDuration = unplacedSpotDuration.Plus(spot.SpotLength);
            }

            return(count, unplacedSpotDuration);
        }
 public static bool DateTimeIsInProgramme(this IProgrammeForBreakAvailCalculation programme, DateTime dateTime)
 {
     return(programme != null && programme.StartDateTime <= dateTime &&
            dateTime < programme.StartDateTime.Add(programme.Duration.ToTimeSpan()));
 }