import XXClient
import XCTestDynamicOverlay

public struct MessengerStartGroupChat {
  public enum Error: Swift.Error, Equatable {
    case notConnected
  }

  public var run: () throws -> Void

  public func callAsFunction() throws {
    try run()
  }
}

extension MessengerStartGroupChat {
  public static func live(_ env: MessengerEnvironment) -> MessengerStartGroupChat {
    MessengerStartGroupChat {
      guard let e2e = env.e2e.get() else {
        throw Error.notConnected
      }
      let groupChat = try env.newGroupChat(
        e2eId: e2e.getId(),
        groupRequest: env.groupRequests.registered(),
        groupChatProcessor: env.groupChatProcessors.registered()
      )
      env.groupChat.set(groupChat)
    }
  }
}

extension MessengerStartGroupChat {
  public static let unimplemented = MessengerStartGroupChat(
    run: XCTestDynamicOverlay.unimplemented("\(Self.self)")
  )
}