import BusX
import SwiftUI

extension MeetupId {
  public struct V: View {
    @StateObject var isJoinAvailable = BusUI.Value(K.isJoinAvailable, false)
    @StateObject var isLoading = BusUI.Value(K.isLoading, false)
    @StateObject var join = BusUI.Button(K.join)
    @StateObject var textField = BusUI.TextField(K.textApp, K.textUI)
    let processors: [Any] = [
      Bus.Processor(shouldEnableJoin, K.M, K.isJoinAvailable),
      MeetupId.Debounce(0.2, formatId, K.textUI, K.textApp),
      MeetupId.Delay(5, finishLoading, K.isLoading, K.finishLoading),
    ]  
    
    public init() { }
    
    public var body: some View {
      VStack(spacing: 8) {
        HStack {
          TextField("Binding-3", value: $textField.v, formatter: BusUI.TextFieldSource())
            .disabled(isLoading.v)
            .padding(8)
            .border(
              !isLoading.v ? Color.black : Color.gray,
              width: !isLoading.v ? 2 : 1
            )
          if isLoading.v {
            ProgressView()
              .padding(8)
          }
        }

        Button(action: join.v.send) {
          Text("Join")
            .padding(8)
            .border(
              isJoinAvailable.v ? Color.green : Color.gray,
              width: isJoinAvailable.v ? 2 : 1
            )
        }
        .disabled(!isJoinAvailable.v)
      }
      .frame(width: 320)
      .padding()
      .animation(.easeInOut(duration: 0.3))
    }
  }
}