import SwiftUI import VoiceCatCore struct BanUserView: View { let user: User @Bindable var session: SessionState @Environment(\.dismiss) private var dismiss @State private var reason = "" @State private var permanent = true @State private var duration: Double = 60 // minutes var body: some View { NavigationStack { Form { Section("Ban \(user.nickname)") { TextField("Reason (optional)", text: $reason) .accessibilityLabel("Ban reason, optional") Toggle("Permanent", isOn: $permanent) .accessibilityLabel("Permanent ban") if !permanent { HStack { Text("Duration") Slider(value: $duration, in: 1...10080, step: 1) .accessibilityLabel("Ban duration in minutes") Text(formattedDuration) .monospacedDigit() .frame(width: 60, alignment: .trailing) } } } } .navigationTitle("Ban User") .navigationBarTitleDisplayMode(.inline) .toolbar { ToolbarItem(placement: .cancellationAction) { Button("Cancel") { dismiss() } } ToolbarItem(placement: .confirmationAction) { Button("Ban", role: .destructive) { let expiresMs: UInt64 = permanent ? 0 : UInt64(Date().timeIntervalSince1970 * 1000) + UInt64(duration * 60 * 1000) session.banUser(user.id, reason: reason, expiresUnixMs: expiresMs) dismiss() } } } } } private var formattedDuration: String { let mins = Int(duration) if mins < 60 { return "\(mins)m" } let hours = mins / 60 if hours < 24 { return "\(hours)h" } return "\(hours / 24)d" } }