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 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") self.launchAtLogin = SMAppService.mainApp.status == .enabled } func resetToDefaults() { host = "0.0.0.0" port = 50051 apiKey = "" autoStartServer = false launchAtLogin = false } }