import 'package:flutter/foundation.dart'; /// A single trace entry capturing a message-handling event. class TraceEntry { final DateTime timestamp; final String event; final String details; const TraceEntry({ required this.timestamp, required this.event, required this.details, }); @override String toString() => '[${timestamp.toIso8601String().substring(11, 23)}] $event — $details'; } /// Singleton ring-buffer trace service. /// /// Captures message-handling events from MQTT, chat screen, and other /// components. The buffer is capped at [maxEntries] (default 200). /// Works in both debug and release builds. class TraceService { TraceService._(); static final TraceService instance = TraceService._(); static const int maxEntries = 200; final List _entries = []; /// All entries, oldest first. List get entries => List.unmodifiable(_entries); /// Add a trace entry. Oldest entry is evicted once the buffer is full. void addTrace(String event, String details) { _entries.add(TraceEntry( timestamp: DateTime.now(), event: event, details: details, )); if (_entries.length > maxEntries) { _entries.removeAt(0); } debugPrint('[TRACE] $event — $details'); } /// Clear all entries. void clear() => _entries.clear(); }