public async Task Enter(WMonitorAlghorithm alghorithm, StateMachine <Triggers, States> sm)
            {
                InProgress = true;
                _cts       = new CancellationTokenSource();
                alghorithm._workTimeEventService.TryStartWatchingScreen();

                alghorithm._canCapureMouseKeyboard = true;

                int timeMs = GetRandomDelay();

                Log.Logger.Debug($"Starting state 5 delay {timeMs}");
                try
                {
                    await Task.Delay(timeMs, _cts.Token);
                }
                catch (TaskCanceledException)
                {
                    InProgress = false;
                    return;
                }

                alghorithm._workTimeEventService.TryAddWatchingScreen();

                InProgress = false;
                Log.Logger.Debug("State 5 face compare timeout");
                sm.Next(WMonitorAlghorithm.Triggers.FaceNotRecog);
            }
            public async Task Enter(StateMachine <Triggers, States> sm, WorkTime workTime, WMonitorAlghorithm alghorithm)
            {
                InProgress = true;
                _cts       = new CancellationTokenSource();
                alghorithm._canCapureMouseKeyboard = true;
                bool faceDetected   = false;
                bool faceRecognized = false;


                while (!faceRecognized || !faceDetected)
                {
                    _workTimeEventService.StartTempChanges();
                    _workTimeEventService.TryStartWatchingScreen();
                    _workTimeEventService.StartRecognitionFailure();

                    Log.Logger.Debug($"Starting {_config.Delay} state 3 delay");

                    try
                    {
                        await Task.Delay(_config.Delay, _cts.Token);
                    }
                    catch (TaskCanceledException)
                    {
                        InProgress = false;
                        return;
                    }

                    (faceDetected, faceRecognized) = await _faceRecognition.RecognizeFace(workTime.User);

                    alghorithm.State3Result((faceDetected, faceRecognized));

                    Log.Logger.Debug(
                        $"State 3 face recognized: {faceRecognized} face detected face recognized: {faceDetected}");

                    if (!faceRecognized || !faceDetected)
                    {
                        _workTimeEventService.DiscardTempChanges();
                        if (!TryAddRecognitionFailure(faceDetected, faceRecognized))
                        {
                            InProgress = false;
                            sm.Next(Triggers.Stop);
                            return;
                        }
                    }
                    else
                    {
                        _workTimeEventService.TryAddWatchingScreen();
                        _workTimeEventService.StopRecognitionFailure();
                        _workTimeEventService.CommitTempChanges();
                    }
                }

                InProgress = false;
                sm.Next(Triggers.FaceRecog);
            }