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"
    }
}
