import Foundation import ServiceManagement @Observable final class AppSettings { var host: String { didSet { UserDefaults.standard.set(host, forKey: "grpc_host") } } var port: Int { didSet { UserDefaults.standard.set(port, forKey: "grpc_port") } } var apiKey: String { didSet { UserDefaults.standard.set(apiKey, forKey: "api_key") } } var autoStartServer: Bool { didSet { UserDefaults.standard.set(autoStartServer, forKey: "auto_start_server") } } var enableReflection: Bool { didSet { UserDefaults.standard.set(enableReflection, forKey: "enable_reflection") } } var launchAtLogin: Bool { didSet { do { if launchAtLogin { try SMAppService.mainApp.register() } else { try SMAppService.mainApp.unregister() } } catch { print("Failed to update launch at login: \(error)") } } } init() { self.host = UserDefaults.standard.string(forKey: "grpc_host") ?? "0.0.0.0" let savedPort = UserDefaults.standard.integer(forKey: "grpc_port") self.port = savedPort == 0 ? 50051 : savedPort self.apiKey = UserDefaults.standard.string(forKey: "api_key") ?? "" self.autoStartServer = UserDefaults.standard.bool(forKey: "auto_start_server") // Default to true if not set if UserDefaults.standard.object(forKey: "enable_reflection") == nil { self.enableReflection = true } else { self.enableReflection = UserDefaults.standard.bool(forKey: "enable_reflection") } self.launchAtLogin = SMAppService.mainApp.status == .enabled } func resetToDefaults() { host = "0.0.0.0" port = 50051 apiKey = "" autoStartServer = false enableReflection = true launchAtLogin = false } }