private ParticpantsData FillAttendanceData(ParticpantsData particpant, DateTime meetingStartTime, DateTime meetingEndTime)
        {
            double randLateJoin     = random.NextDouble();
            double randEarlyLeaving = random.NextDouble();

            DateTime joinTime = randLateJoin < 0.8 ?
                                meetingStartTime.AddMinutes(random.Next(0, 5) + random.NextDouble()):
                                meetingStartTime.AddMinutes(random.Next(0, (int)(meetingEndTime - meetingStartTime).TotalMinutes));
            DateTime leftTime = randEarlyLeaving < 0.8 ?
                                meetingEndTime.AddMinutes(-1 * (random.Next(0, 5)) + random.NextDouble()) :                    //sub
                                meetingEndTime.AddMinutes(-1 * random.Next(0, (int)(meetingEndTime - meetingStartTime).TotalMinutes));

            if (leftTime < joinTime)
            {
                leftTime = joinTime;
            }

            particpant.AttendanceData = new AttendanceData
            {
                MeetingAttendanceIntervals = new MeetingAttendanceInterval[]
                {
                    new MeetingAttendanceInterval
                    {
                        JoinTimeUTC = joinTime,

                        LeaveTimeUTC = leftTime,

                        DurationInSeconds = (leftTime - joinTime).TotalSeconds,
                    }
                },
                TotalMeetingDurationInSeconds = (leftTime - joinTime).TotalSeconds,
            };

            return(particpant);
        }
        private void FillRaiseHandsData(ParticpantsData particpant)
        {
            DateTime joinTimeUTC  = particpant.AttendanceData.MeetingAttendanceIntervals[0].JoinTimeUTC;
            DateTime leaveTimeUTC = particpant.AttendanceData.MeetingAttendanceIntervals[0].LeaveTimeUTC;
            var      prevTime     = joinTimeUTC;
            var      curTime      = prevTime.AddMinutes(5) < leaveTimeUTC?prevTime.AddMinutes(10) :  leaveTimeUTC;

            var curiousUser     = random.NextDouble();
            var extraCuriousity = curiousUser > 0.7 ? 0.1 :0;

            List <RaiseHandsInterval> raisedHandsIntervals = new List <RaiseHandsInterval>();

            while (curTime < leaveTimeUTC)
            {
                var rand = random.NextDouble();

                if (rand < chanceToRaiseHands + extraCuriousity) // 10% prob
                {
                    var raisedHandIntervalStartTime = curTime.AddMinutes((curTime - prevTime).TotalMinutes * random.NextDouble());
                    raisedHandsIntervals.Add(new RaiseHandsInterval
                    {
                        StartTimeUTC = raisedHandIntervalStartTime,
                        EndTimeUTC   = raisedHandIntervalStartTime.AddMinutes((curTime - raisedHandIntervalStartTime).TotalMinutes * random.NextDouble())
                    });
                }

                prevTime = curTime;
                curTime  = curTime.AddMinutes(5);
            }

            particpant.RaiseHandsData = new RaiseHandsData
            {
                TotalCount          = raisedHandsIntervals.Count,
                RaiseHandsIntervals = raisedHandsIntervals.ToArray(),
            };
        }