getStats method

SessionStats getStats()

Gets current session statistics.

Implementation

SessionStats getStats() {
  final now = DateTime.now();
  final duration = _startedAt != null
      ? (_endedAt ?? now).difference(_startedAt!)
      : Duration.zero;

  final validCount = _results.where((r) => r.isValid).length;
  final invalidCount = _results.where((r) => !r.isValid).length;

  Duration? avgInterval;
  if (_scanTimestamps.length >= 2) {
    final totalInterval = _scanTimestamps.last
        .difference(_scanTimestamps.first)
        .inMilliseconds;
    avgInterval = Duration(
        milliseconds: totalInterval ~/ (_scanTimestamps.length - 1));
  }

  // Find dominant mode
  ScanMode? dominant;
  if (_results.isNotEmpty) {
    final modeCounts = <ScanMode, int>{};
    for (final result in _results) {
      modeCounts[result.mode] = (modeCounts[result.mode] ?? 0) + 1;
    }
    dominant = modeCounts.entries
        .reduce((a, b) => a.value >= b.value ? a : b)
        .key;
  }

  return SessionStats(
    totalScans: _results.length,
    validScans: validCount,
    invalidScans: invalidCount,
    duplicatesFiltered: _duplicatesFiltered,
    startedAt: _startedAt ?? now,
    endedAt: _endedAt,
    duration: duration,
    successRate:
        _results.isNotEmpty ? validCount / _results.length : 0.0,
    averageScanInterval: avgInterval,
    dominantMode: dominant,
  );
}