/// Configurable limits with sane defaults. These are the dials the user is
/// allowed to turn — everything else about enforcement is fixed.
class Thresholds {
  /// Hard cap on unresolved overdue items.
  static const int maxOpenOverdue = 5;

  /// After this, a task cannot be deferred again — only completed or
  /// explicitly abandoned.
  static const int maxDeferralsPerTask = 2;

  /// Minimum excuse length. Free text, no template buttons; the friction is
  /// the point.
  static const int minExcuseLength = 15;

  /// Standing thresholds on the debt score.
  static const double warnedThreshold = 12;
  static const double groundedThreshold = 30;
  static const double lockdownThreshold = 60;

  /// Missed non-negotiables that force Grounded regardless of score.
  static const int nonNegotiableMissesForGrounded = 3;

  /// Amnesty tokens granted per month.
  static const int amnestyTokensPerMonth = 3;

  /// Capacity check headroom — plan against 85% of what you historically get
  /// done, not 100%.
  static const double capacityHeadroom = 0.85;

  /// Days after which an untouched elective auto-archives.
  static const int electiveArchiveDays = 21;

  /// Snooze tax: each snooze shortens the next interval instead of extending
  /// it, and the third becomes a full-screen alarm.
  static const List<int> snoozeLadderMinutes = <int>[10, 5, 2];

  /// Minutes a push can go unacknowledged before SMS fallback fires.
  static const int smsFallbackMinutes = 20;
}
