class CronUtils {
  static const List<String> 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<int> 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<int>.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<int> 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<int>.from(selectedDays)..sort();
    return sorted.join(',');
  }

  /// Mengekstrak hari aktif (array int 0-6) dari cron "30 17 * * 1,3,5"
  static List<int> 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
    }
  }
}
