timeRemaining method
Gets the remaining time until the cooldown ends.
Returns Duration.zero if the cooldown has expired or was never activated.
Implementation
Future<Duration> timeRemaining() async {
final last = await _lastActivated.get();
if (last == null) return Duration.zero;
final end = last.add(duration);
final now = DateTime.now();
return end.isAfter(now) ? end.difference(now) : Duration.zero;
}