// SettingsView.swift // Jarvis — settings hub: Notifications, Connectivity, and server info. import SwiftUI struct SettingsView: View { @EnvironmentObject var settings: ServerSettings @Environment(\.dismiss) private var dismiss var body: some View { NavigationStack { ZStack { Color.black.ignoresSafeArea() ScrollView { VStack(alignment: .leading, spacing: 26) { header group("GENERAL") { NavigationLink { NotificationsView() } label: { row(icon: "bell.badge", title: "Notifications", subtitle: "Briefings & breaking alerts") } divider NavigationLink { ConnectivityView() } label: { row(icon: "globe", title: "Connectivity", subtitle: "Server address & Tailscale remote") } } group("PLATFORM") { row(icon: "server.rack", title: settings.host ?? "Not configured", subtitle: "Connected server", chevron: false) } } .padding(.horizontal, 20) .padding(.vertical, 12) } } .navigationBarHidden(true) } .preferredColorScheme(.dark) .presentationDragIndicator(.visible) } private var header: some View { HStack { Text("Settings").font(.system(size: 22, weight: .heavy)).foregroundStyle(.white) Spacer() Button { dismiss() } label: { Image(systemName: "xmark").font(.system(size: 15, weight: .bold)) .foregroundStyle(Color(hex: "888888")).frame(width: 44, height: 44) } } .padding(.top, 8) } private func group(_ label: String, @ViewBuilder _ content: () -> C) -> some View { VStack(alignment: .leading, spacing: 10) { Text(label).font(.system(size: 11, weight: .bold, design: .monospaced)) .kerning(0.8).foregroundStyle(Color(hex: "555555")) VStack(spacing: 0) { content() } .background(Palette.surface) .clipShape(RoundedRectangle(cornerRadius: 14)) } } private func row(icon: String, title: String, subtitle: String, chevron: Bool = true) -> some View { HStack(spacing: 14) { Image(systemName: icon).font(.system(size: 18)).foregroundStyle(Color(hex: "999999")).frame(width: 26) VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 16, weight: .heavy)).foregroundStyle(.white).lineLimit(1) Text(subtitle).font(.system(size: 12)).foregroundStyle(Color(hex: "888888")).lineLimit(1) } Spacer() if chevron { Image(systemName: "chevron.right").font(.system(size: 13, weight: .bold)) .foregroundStyle(Color(hex: "555555")) } } .padding(.horizontal, 14).padding(.vertical, 14).frame(minHeight: 44) .contentShape(Rectangle()) } private var divider: some View { Rectangle().fill(Palette.surface2).frame(height: 1).padding(.leading, 54) } }