/// Formulierung des gewählten Tour-Tags für Fließtexte, z. B. in den /// Leer-Ansichten („Für heute ist keine Tour zugewiesen." bzw. „Für den /// 22.09.2026 …"). /// /// `null` als gewähltes Datum heißt „heute" (Server-Default, siehe /// `TourDateCubit`). Heute/morgen/gestern werden relativ zur Geräte-Uhr /// benannt, alle anderen Tage mit Datum. class TourDayText { const TourDayText._(this._relative, this.date); factory TourDayText.of(DateTime? selected, {DateTime? now}) { final clock = now ?? DateTime.now(); final today = DateTime(clock.year, clock.month, clock.day); final day = selected == null ? today : DateTime(selected.year, selected.month, selected.day); final relative = switch (day.difference(today).inDays) { 0 => 'heute', 1 => 'morgen', -1 => 'gestern', _ => null, }; return TourDayText._(relative, _format(day)); } final String? _relative; /// Datum als „TT.MM.JJJJ". final String date; /// Umstandsangabe: „heute" / „am 22.09.2026". String get when => _relative ?? 'am $date'; /// Nach „für": „heute" / „den 22.09.2026". String get afterFor => _relative ?? 'den $date'; static String _format(DateTime d) => '${d.day.toString().padLeft(2, '0')}.' '${d.month.toString().padLeft(2, '0')}.${d.year}'; }