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) if settings.role == .control { Picker("Klinik-Netz", selection: Binding(get: { settings.clinicInterfaceName }, set: { settings.clinicInterfaceName = $0; restartIntercom() })) { Text("Aus – kein Intercom").tag("") ForEach(interfaces) { interface in Text(verbatim: "\(interface.name) · \(interface.kind)").tag(interface.name) } if !settings.clinicInterfaceName.isEmpty, !interfaces.contains(where: { $0.name == settings.clinicInterfaceName }) { Text(verbatim: "\(settings.clinicInterfaceName) · nicht verbunden").tag(settings.clinicInterfaceName) } } Text(settings.clinicInterfaceName == settings.interfaceName ? "Gleiche Schnittstelle wie das Technik-Netz: nur zum Testen. Im Einsatz getrennt halten." : "Handys erreichen das Intercom nur über diese Schnittstelle.") .font(Theme.Font.caption) .foregroundStyle(settings.clinicInterfaceName == settings.interfaceName ? Theme.Color.kohaku : 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() await coordinator.intercom.restart() } } private func restartIntercom() { Task { await coordinator.intercom.restart() } } }