/// <summary>
        /// Finishes current lap and creates new one (ongoing).
        /// </summary>
        public void Lap()
        {
            if (!_running || _paused)
            {
                return;
            }

            List <LapModel> added = new List <LapModel>();

            if (_laps.Count == 0)
            {
                LapModel firstLap = new LapModel(1, ElapsedTime, true);
                _laps.Add(firstLap);
                added.Add(firstLap);
            }

            if (!_laps.Last().Finished)
            {
                _laps.Last().Finish();
            }

            LapModel lap = new LapModel(_laps.Count + 1, TimeSpan.Zero);

            _laps.Add(lap);
            added.Add(lap);

            LapsAdded?.Invoke(this, new LapsAddedEventArgs(added));
        }
        /// <summary>
        /// Starts/resumes the stopwatch.
        /// </summary>
        public void Start()
        {
            if (_running && !_paused)
            {
                return;
            }

            LapModel lastLap = null;

            if (_laps.Count > 0)
            {
                lastLap = _laps.Last();
            }

            if (!_running)
            {
                _elapsedTimeToLastPause = TimeSpan.Zero;
                _running = true;
            }

            _lastResumeTime = DateTime.Now;
            lastLap?.Resume();

            _paused = false;
        }
        /// <summary>
        /// Pauses the stopwatch.
        /// </summary>
        public void Pause()
        {
            if (!_running || _paused)
            {
                return;
            }

            LapModel lastLap = null;

            if (_laps.Count > 0)
            {
                lastLap = _laps.Last();
            }

            _elapsedTimeToLastPause = ElapsedTime;
            lastLap?.Pause();

            _paused = true;
        }