import Foundation struct CapturaSettings { static var frameRate: Int { get { if UserDefaults.standard.object(forKey: "frameRate") == nil { return 10 } else { return min(10, max(4, UserDefaults.standard.integer(forKey: "frameRate"))) } } set { UserDefaults.standard.setValue(newValue, forKey: "frameRate") } } static var outputFormats: OutputFormatSetting { get { OutputFormatSetting(rawValue: UserDefaults.standard.integer(forKey: "outputFormats")) ?? .all } set { UserDefaults.standard.setValue(newValue.rawValue, forKey: "outputFormats") } } static var shouldSaveMp4: Bool { outputFormats.shouldSaveMp4() || (shouldUseBackend && shouldUploadMp4) } static var shouldSaveGif: Bool { outputFormats.shouldSaveGif() || (shouldUseBackend && shouldUploadGif) } static var shouldUploadGif: Bool { backendFormat.shouldSaveGif() } static var shouldUploadMp4: Bool { backendFormat.shouldSaveMp4() } static var shouldUseBackend: Bool { backend != nil } static var backend: URL? { get { if let url = UserDefaults.standard.string(forKey: "backendUrl") { return URL(string: url) } return nil } set { UserDefaults.standard.setValue(newValue?.absoluteString, forKey: "backendUrl") } } static var backendFormat: OutputFormatSetting { get { OutputFormatSetting(rawValue: UserDefaults.standard.integer(forKey: "backendFormat")) ?? .gifOnly } set { UserDefaults.standard.setValue(newValue.rawValue, forKey: "backendFormat") } } static var shouldKeepLocalFiles: Bool { get { if UserDefaults.standard.object(forKey: "keepFiles") == nil { return true } else { return UserDefaults.standard.bool(forKey: "keepFiles") } } set { UserDefaults.standard.set(newValue, forKey: "keepFiles") } } static var shouldAllowURLAutomation: Bool { get { UserDefaults.standard.bool(forKey: "allowURLAutomation") } set { UserDefaults.standard.setValue(newValue, forKey: "allowURLAutomation") } } static func apply(_ config: ConfigureAction) { if let fps = config.fps { frameRate = fps } if let outputs = config.outputs { outputFormats = outputs } if let newBackend = config.backend { backend = newBackend } if let backendOutput = config.backendOutput { backendFormat = backendOutput } if let keepLocalFiles = config.keepLocalFiles { shouldKeepLocalFiles = keepLocalFiles } } }