// Method RidingOnAttractions use for riding emulation.
        // Method will call from ToRide() in separete thread based on logic from ThreadPool.QueueUserWorkItem
        private static void RidingOnAttractions(Kid kids, Attraction currentAttraction)
        {
            var rand = new Random();

            // Set Action for kid with attraction name and durations
            kids.SetKidAction("I'm staring to ride on => " + currentAttraction.Name + " for " + currentAttraction.Duration + " sec");
            kids.SetBusyStatus(true);

            // Adding money to Global cash box
            currentAttraction.AddMoneyToCashBox();

            //Increase Kid satisfaction degree
            kids.ChangeSatisfactionDegree(rand.Next(10, 20));

            //Attraction payment
            kids.ChangeMoneyAmount(currentAttraction.Price);

            // Riding emulation by sleepinn on attraction duration x1000 (as Seconds)
            Thread.Sleep(currentAttraction.Duration * 1000);

            // Then attraction finished - update status to Finished + free
            kids.SetKidAction("I've FINISHED to ride on => " + currentAttraction.Name);
            kids.SetBusyStatus(false);
        }
        //Get random valid attraction for Kid based on Attraction conditions
        // return null or 1 Attraction
        private Attraction GetRandomValidAttractionForKid(Kid kid)
        {
            // using for store ALL available attraction ( based on rules/ condition ) related to current Kid.
            var rand = new Random();

            kid.SetKidAction("Trying to get list of avaiable Attractions");

            // Try to find available attractions
            var listOfAvailableAttractionForKid =
                ListOfOpenRandomAttractions.GetListOfGeneratedAttractions()
                .Where(attraction => attraction.DoValidation(kid, WeekDay))
                .ToList();

            // return null Or Random attraction.
            // null - if there no available attraction for Kid.
            // Random attraction calculated as Random LIST index for all available attractions for 1 kid.
            //    List index started from 0, thats why total count of available attractions should be decreased on 1 for count > 1.
            return(listOfAvailableAttractionForKid.Count <= 0?
                   null:
                   listOfAvailableAttractionForKid[rand.Next(0, listOfAvailableAttractionForKid.Count > 1 ?
                                                             listOfAvailableAttractionForKid.Count :
                                                             listOfAvailableAttractionForKid.Count - 1)]);
        }