import 'semester.dart'; enum ColorMode { single, multicolor } class AppSettings { AppSettings({ this.semester, this.remindersEnabled = true, int reminderMinutes = 15, List? reminderOffsets, this.colorMode = ColorMode.multicolor, this.singleColorArgb = 0xFF348F91, this.calendarEnabled = false, this.calendarId, this.courseHeightScale = defaultCourseHeightScale, }) : reminderOffsets = List.unmodifiable( (reminderOffsets ?? [reminderMinutes]).toSet().toList()..sort(), ); static const allowedReminderMinutes = [5, 10, 15, 30, 60]; static const defaultCourseHeightScale = 1.25; static const minCourseHeightScale = 0.8; static const maxCourseHeightScale = 2.0; final double courseHeightScale; final Semester? semester; final bool remindersEnabled, calendarEnabled; final int singleColorArgb; final List reminderOffsets; // Retain the single-value API and JSON field for existing saved data. int get reminderMinutes => reminderOffsets.isEmpty ? 15 : reminderOffsets.first; final ColorMode colorMode; final String? calendarId; AppSettings copyWith({ Semester? semester, bool clearSemester = false, bool? remindersEnabled, int? reminderMinutes, List? reminderOffsets, ColorMode? colorMode, int? singleColorArgb, bool? calendarEnabled, String? calendarId, double? courseHeightScale, }) => AppSettings( semester: clearSemester ? null : semester ?? this.semester, remindersEnabled: remindersEnabled ?? this.remindersEnabled, reminderOffsets: reminderOffsets ?? (reminderMinutes == null ? this.reminderOffsets : [reminderMinutes]), colorMode: colorMode ?? this.colorMode, singleColorArgb: singleColorArgb ?? this.singleColorArgb, calendarEnabled: calendarEnabled ?? this.calendarEnabled, calendarId: calendarId ?? this.calendarId, courseHeightScale: courseHeightScale ?? this.courseHeightScale, ); }