// lib/utils/holidays_at.dart import 'helpers.dart'; // ymd(DateTime) DateTime _easterSunday(int year) { final a = year % 19; final b = year ~/ 100; final c = year % 100; final d = b ~/ 4; final e = b % 4; final f = ((b + 8) ~/ 25); final g = ((b - f + 1) ~/ 3); final h = (19 * a + b - d - g + 15) % 30; final i = c ~/ 4; final k = c % 4; final l = (32 + 2 * e + 2 * i - h - k) % 7; final m = ((a + 11 * h + 22 * l) ~/ 451); final month = ((h + l - 7 * m + 114) ~/ 31); final day = ((h + l - 7 * m + 114) % 31) + 1; return DateTime(year, month, day); } DateTime _addDays(DateTime d, int days) => DateTime(d.year, d.month, d.day + days); Map buildHolidayMapAT( int year, { bool includeWeekends = false, }) { final Map map = {}; // setzt nur, wenn noch nichts gesetzt wurde (echte Feiertage sollen Vorrang haben) void putIfEmpty(DateTime date, String name) { final key = ymd(date); map.putIfAbsent(key, () => name); } // Bewegliche Feiertage final easter = _easterSunday(year); // (Karfreitag ist in AT nicht generell arbeitsfrei – ggf. entfernen) putIfEmpty(_addDays(easter, -2), 'Karfreitag'); putIfEmpty(_addDays(easter, 1), 'Ostermontag'); putIfEmpty(_addDays(easter, 39), 'Christi Himmelfahrt'); putIfEmpty(_addDays(easter, 50), 'Pfingstmontag'); putIfEmpty(_addDays(easter, 60), 'Fronleichnam'); // Feste Feiertage putIfEmpty(DateTime(year, 1, 1), 'Neujahr'); putIfEmpty(DateTime(year, 1, 6), 'Heilige Drei Könige'); putIfEmpty(DateTime(year, 5, 1), 'Staatsfeiertag'); putIfEmpty(DateTime(year, 8, 15), 'Mariä Himmelfahrt'); putIfEmpty(DateTime(year, 10, 26), 'Nationalfeiertag'); putIfEmpty(DateTime(year, 11, 1), 'Allerheiligen'); putIfEmpty(DateTime(year, 12, 8), 'Mariä Empfängnis'); putIfEmpty(DateTime(year, 12, 25), 'Christtag'); putIfEmpty(DateTime(year, 12, 26), 'Stefanitag'); // Optional: Wochenenden **nur ergänzen**, aber niemals Feiertage überschreiben if (includeWeekends) { DateTime d = DateTime(year, 1, 1); while (d.year == year) { final wd = d.weekday; if (wd == DateTime.saturday || wd == DateTime.sunday) { final key = ymd(d); if (!map.containsKey(key)) { putIfEmpty(d, wd == DateTime.saturday ? 'Samstag' : 'Sonntag'); } } d = d.add(const Duration(days: 1)); } } return map; }