import ComposableArchitecture
import SwiftUI

public struct ErrorView: View {
  public init(store: Store<ErrorState, ErrorAction>) {
    self.store = store
  }

  let store: Store<ErrorState, ErrorAction>
  @Environment(\.dismiss) var dismiss

  struct ViewState: Equatable {
    let error: NSError

    init(state: ErrorState) {
      error = state.error
    }
  }

  public var body: some View {
    WithViewStore(store.scope(state: ViewState.init)) { viewStore in
      NavigationView {
        Form {
          Text("\(viewStore.error)")
        }
        .navigationTitle("Error")
        .toolbar {
          ToolbarItem(placement: .cancellationAction) {
            Button {
              dismiss()
            } label: {
              Image(systemName: "xmark")
            }
          }
        }
      }
    }
  }
}

#if DEBUG
public struct ErrorView_Previews: PreviewProvider {
  public static var previews: some View {
    ErrorView(store: .init(
      initialState: .init(
        error: NSError(domain: "preview", code: 1234)
      ),
      reducer: .empty,
      environment: ()
    ))
  }
}
#endif