/** * DailyNotificationConfig.swift * Daily Notification Plugin for Capacitor * * Provides configuration options for the notification plugin */ import Foundation /// Configuration options for the DailyNotification plugin /// /// This singleton structure provides configurable options that can be modified /// to customize the plugin's behavior. public struct DailyNotificationConfig { /// Shared instance for singleton access public static var shared = DailyNotificationConfig() /// Maximum number of notifications that can be scheduled per day public var maxNotificationsPerDay = 10 /// Default timezone for notifications when none is specified public var defaultTimeZone = TimeZone.current /// Whether debug logging is enabled public var loggingEnabled = true /// Number of days to retain delivered notifications public var retentionDays = 7 /// Whether adaptive scheduling is enabled public var adaptiveSchedulingEnabled = true /// Battery level thresholds for adaptive scheduling public struct BatteryThresholds { public static let critical = 15 public static let low = 30 public static let medium = 50 } /// Time intervals for different battery levels (in seconds) public struct SchedulingIntervals { public static let critical = TimeInterval(4 * 60 * 60) // 4 hours public static let low = TimeInterval(2 * 60 * 60) // 2 hours public static let medium = TimeInterval(60 * 60) // 1 hour public static let normal = TimeInterval(30 * 60) // 30 minutes } /// Wake lock duration based on battery level (in seconds) public struct WakeLockDurations { public static let critical = TimeInterval(30) // 30 seconds public static let low = TimeInterval(45) // 45 seconds public static let normal = TimeInterval(60) // 1 minute } private init() {} /// Resets all configuration options to their default values public mutating func resetToDefaults() { maxNotificationsPerDay = 10 defaultTimeZone = TimeZone.current loggingEnabled = true retentionDays = 7 adaptiveSchedulingEnabled = true } /// Validates and sets the maximum notifications per day /// - Parameter value: The new maximum notifications value /// - Throws: DailyNotificationError if the value is invalid public mutating func setMaxNotificationsPerDay(_ value: Int) throws { guard value > 0 else { throw DailyNotificationError.invalidParameters("Max notifications per day must be greater than 0") } maxNotificationsPerDay = value } /// Validates and sets the retention days /// - Parameter value: The new retention days value /// - Throws: DailyNotificationError if the value is invalid public mutating func setRetentionDays(_ value: Int) throws { guard value > 0 else { throw DailyNotificationError.invalidParameters("Retention days must be greater than 0") } retentionDays = value } }