import XXClient
import XCTestDynamicOverlay

public struct MessengerStart {
  public enum Error: Swift.Error, Equatable {
    case notLoaded
  }

  public var run: (Int) throws -> Void

  public func callAsFunction(
    timeoutMS: Int = 30_000
  ) throws {
    try run(timeoutMS)
  }
}

extension MessengerStart {
  public static func live(_ env: MessengerEnvironment) -> MessengerStart {
    MessengerStart { timeoutMS in
      guard let cMix = env.cMix() else {
        throw Error.notLoaded
      }
      guard cMix.networkFollowerStatus() != .running else {
        return
      }
      try cMix.startNetworkFollower(timeoutMS: timeoutMS)
    }
  }
}

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