class CronUtils { static const List shortDays = ['Min', 'Sen', 'Sel', 'Rab', 'Kam', 'Jum', 'Sab']; /// Mengkonversi array of integers [0, 1, 2, ...] ke string (Misal: "Setiap Hari" atau "Sen, Sel") static String getRepeatText(List selectedDays) { if (selectedDays.isEmpty) return 'Tidak diulang'; if (selectedDays.length == 7) return 'Setiap Hari'; // Sortir agar hari selalu urut (Min=0, Sen=1, ... Sab=6) final sortedDays = List.from(selectedDays)..sort(); return sortedDays.map((d) => shortDays[d]).join(', '); } /// Mengubah list dari [1,3,5] menjadi "1,3,5" untuk ditaruh di cron. /// Jika 7 hari terpilih, kembalikan "*" static String daysToCron(List selectedDays) { if (selectedDays.isEmpty) return '*'; // Default fallback if (selectedDays.length == 7) return '*'; // Selalu urutkan agar cron string konsisten, terlepas dari urutan user memilih final sorted = List.from(selectedDays)..sort(); return sorted.join(','); } /// Mengekstrak hari aktif (array int 0-6) dari cron "30 17 * * 1,3,5" static List parseDaysFromCron(String cron) { final parts = cron.split(' '); if (parts.length < 5) return [0, 1, 2, 3, 4, 5, 6]; // Fallback setiap hari final dayPart = parts[4]; if (dayPart == '*') return [0, 1, 2, 3, 4, 5, 6]; try { final days = dayPart.split(',').map((e) => int.parse(e.trim())).toList(); return days; } catch (_) { return [0, 1, 2, 3, 4, 5, 6]; // Fallback jika gagal parse } } }