import Bindings
import XCTestDynamicOverlay

public struct CMixAddHealthCallback {
  public var run: (HealthCallback) -> Cancellable

  public func callAsFunction(_ callback: HealthCallback) -> Cancellable {
    run(callback)
  }
}

extension CMixAddHealthCallback {
  public static func live(_ bindingsCMix: BindingsCmix) -> CMixAddHealthCallback {
    CMixAddHealthCallback { callback in
      let id = bindingsCMix.add(
        callback.makeBindingsHealthCallback()
      )
      return Cancellable {
        bindingsCMix.removeHealthCallback(id)
      }
    }
  }
}

extension CMixAddHealthCallback {
  public static let unimplemented = CMixAddHealthCallback(
    run: XCTUnimplemented("\(Self.self)", placeholder: Cancellable {})
  )
}