import 'package:flutter/material.dart'; import '../models/work_interval.dart'; int _toMinutes(TimeOfDay t) => t.hour * 60 + t.minute; /// Effektive Arbeitsminuten eines Tages nach Pausenregel: /// - <= 6h Arbeit: keine Pflichtpause /// - > 6h Arbeit: 30 Min Pflichtpause, reduziert um die Summe der Lücken /// zwischen Intervallen (maximal bis 0 reduzierbar). int effectiveWorkedMinutes( List intervals, { int requiredBreakOver6h = 30, }) { if (intervals.isEmpty) return 0; // sortieren final sorted = [...intervals] ..sort((a, b) => _toMinutes(a.start).compareTo(_toMinutes(b.start))); // Arbeitszeit summieren int worked = 0; for (final iv in sorted) { final w = _toMinutes(iv.end) - _toMinutes(iv.start); if (w > 0) worked += w; } if (worked <= 6 * 60) return worked; // Lücken summieren int gaps = 0; for (var i = 0; i < sorted.length - 1; i++) { final gap = _toMinutes(sorted[i + 1].start) - _toMinutes(sorted[i].end); if (gap > 0) gaps += gap; } final extraBreak = (requiredBreakOver6h - gaps).clamp(0, requiredBreakOver6h); final effective = worked - extraBreak; return effective < 0 ? 0 : effective; }