///
/// HybridVideoPlayerEventEmitterSpec.swift
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © 2025 Marc Rousavy @ Margelo
///

import Foundation
import NitroModules

/// See ``HybridVideoPlayerEventEmitterSpec``
public protocol HybridVideoPlayerEventEmitterSpec_protocol: HybridObject {
  // Properties
  var onAudioBecomingNoisy: () -> Void { get set }
  var onAudioFocusChange: (_ hasAudioFocus: Bool) -> Void { get set }
  var onBandwidthUpdate: (_ data: BandwidthData) -> Void { get set }
  var onBuffer: (_ buffering: Bool) -> Void { get set }
  var onControlsVisibleChange: (_ visible: Bool) -> Void { get set }
  var onEnd: () -> Void { get set }
  var onExternalPlaybackChange: (_ externalPlaybackActive: Bool) -> Void { get set }
  var onLoad: (_ data: onLoadData) -> Void { get set }
  var onLoadStart: (_ data: onLoadStartData) -> Void { get set }
  var onPlaybackStateChange: (_ data: onPlaybackStateChangeData) -> Void { get set }
  var onPlaybackRateChange: (_ rate: Double) -> Void { get set }
  var onProgress: (_ data: onProgressData) -> Void { get set }
  var onReadyToDisplay: () -> Void { get set }
  var onSeek: (_ seekTime: Double) -> Void { get set }
  var onTimedMetadata: (_ metadata: TimedMetadata) -> Void { get set }
  var onTextTrackDataChanged: (_ texts: [String]) -> Void { get set }
  var onTrackChange: (_ track: TextTrack?) -> Void { get set }
  var onVolumeChange: (_ data: onVolumeChangeData) -> Void { get set }
  var onStatusChange: (_ status: VideoPlayerStatus) -> Void { get set }

  // Methods
  
}

/// See ``HybridVideoPlayerEventEmitterSpec``
open class HybridVideoPlayerEventEmitterSpec_base {
  private weak var cxxWrapper: HybridVideoPlayerEventEmitterSpec_cxx? = nil
  public init() { }
  public func getCxxWrapper() -> HybridVideoPlayerEventEmitterSpec_cxx {
  #if DEBUG
    guard self is HybridVideoPlayerEventEmitterSpec else {
      fatalError("`self` is not a `HybridVideoPlayerEventEmitterSpec`! Did you accidentally inherit from `HybridVideoPlayerEventEmitterSpec_base` instead of `HybridVideoPlayerEventEmitterSpec`?")
    }
  #endif
    if let cxxWrapper = self.cxxWrapper {
      return cxxWrapper
    } else {
      let cxxWrapper = HybridVideoPlayerEventEmitterSpec_cxx(self as! HybridVideoPlayerEventEmitterSpec)
      self.cxxWrapper = cxxWrapper
      return cxxWrapper
    }
  }
}

/**
 * A Swift base-protocol representing the VideoPlayerEventEmitter HybridObject.
 * Implement this protocol to create Swift-based instances of VideoPlayerEventEmitter.
 * ```swift
 * class HybridVideoPlayerEventEmitter : HybridVideoPlayerEventEmitterSpec {
 *   // ...
 * }
 * ```
 */
public typealias HybridVideoPlayerEventEmitterSpec = HybridVideoPlayerEventEmitterSpec_protocol & HybridVideoPlayerEventEmitterSpec_base
