/// Finished diaries stay editable for this many calendar days back from today, /// including today. Older finished days stay read-only. const int diaryFinishedEditWindowInDays = 7; bool canEditDiaryDay({ required bool isConsultantView, required bool isDiaryCommented, required bool isDiaryFinished, required int closed, required String diaryDate, DateTime? now, }) { if (isConsultantView || isDiaryCommented || closed != 0) { return false; } if (!isDiaryFinished) { return true; } final day = _calendarDate(diaryDate); if (day == null) { return false; } final clock = now ?? DateTime.now(); final today = DateTime(clock.year, clock.month, clock.day); final oldestEditableDay = today.subtract( const Duration(days: diaryFinishedEditWindowInDays), ); return !day.isBefore(oldestEditableDay) && !day.isAfter(today); } DateTime? _calendarDate(String raw) { final parsed = DateTime.tryParse(raw); if (parsed == null) { return null; } final local = parsed.toLocal(); return DateTime(local.year, local.month, local.day); }