import DesignSystem import MusubiCore import Remote import SwiftUI struct SettingsView: View { let coordinator: Coordinator @State private var interfaces: [NetworkInterfaces.Info] = [] @State private var launchAtLogin = false private var settings: AppSettings { coordinator.settings } var body: some View { Form { Picker("Rolle", selection: Binding(get: { settings.role }, set: { settings.role = $0; restart() })) { Text("Regie – steuert Knoten, verwaltet Szenen").tag(Role.control) Text("Knoten – folgt der Regie").tag(Role.node) } Picker("Technik-Netz", selection: Binding(get: { settings.interfaceName }, set: { settings.interfaceName = $0; restart() })) { ForEach(interfaces) { interface in Text(verbatim: "\(interface.name) · \(interface.kind)").tag(interface.name) } if !interfaces.contains(where: { $0.name == settings.interfaceName }) { Text(verbatim: "\(settings.interfaceName) · nicht verbunden").tag(settings.interfaceName) } } Text("Regie und Knoten finden sich nur über diese Schnittstelle.") .font(Theme.Font.caption) .foregroundStyle(Theme.Color.nezumi) Toggle("Beim Anmelden starten", isOn: Binding(get: { launchAtLogin }, set: { settings.launchAtLogin = $0 launchAtLogin = settings.launchAtLogin })) LabeledContent("Name im Netz") { Text(verbatim: settings.machineName) } } .formStyle(.grouped) .frame(width: 460) .task { interfaces = await NetworkInterfaces.available() launchAtLogin = settings.launchAtLogin } } private func restart() { Task { await coordinator.startRemote() } } }