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

package com.margelo.nitro.video

import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
import com.margelo.nitro.core.*

/**
 * A Kotlin class representing the VideoPlayerEventEmitter HybridObject.
 * Implement this abstract class to create Kotlin-based instances of VideoPlayerEventEmitter.
 */
@DoNotStrip
@Keep
@Suppress(
  "KotlinJniMissingFunction", "unused",
  "RedundantSuppression", "RedundantUnitReturnType", "SimpleRedundantLet",
  "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
)
abstract class HybridVideoPlayerEventEmitterSpec: HybridObject() {
  @DoNotStrip
  private var mHybridData: HybridData = initHybrid()

  init {
    super.updateNative(mHybridData)
  }

  override fun updateNative(hybridData: HybridData) {
    mHybridData = hybridData
    super.updateNative(hybridData)
  }

  // Properties
  abstract var onAudioBecomingNoisy: () -> Unit
  
  private var onAudioBecomingNoisy_cxx: Func_void
    @Keep
    @DoNotStrip
    get() {
      return Func_void_java(onAudioBecomingNoisy)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onAudioBecomingNoisy = value
    }
  
  abstract var onAudioFocusChange: (hasAudioFocus: Boolean) -> Unit
  
  private var onAudioFocusChange_cxx: Func_void_bool
    @Keep
    @DoNotStrip
    get() {
      return Func_void_bool_java(onAudioFocusChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onAudioFocusChange = value
    }
  
  abstract var onBandwidthUpdate: (data: BandwidthData) -> Unit
  
  private var onBandwidthUpdate_cxx: Func_void_BandwidthData
    @Keep
    @DoNotStrip
    get() {
      return Func_void_BandwidthData_java(onBandwidthUpdate)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onBandwidthUpdate = value
    }
  
  abstract var onBuffer: (buffering: Boolean) -> Unit
  
  private var onBuffer_cxx: Func_void_bool
    @Keep
    @DoNotStrip
    get() {
      return Func_void_bool_java(onBuffer)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onBuffer = value
    }
  
  abstract var onControlsVisibleChange: (visible: Boolean) -> Unit
  
  private var onControlsVisibleChange_cxx: Func_void_bool
    @Keep
    @DoNotStrip
    get() {
      return Func_void_bool_java(onControlsVisibleChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onControlsVisibleChange = value
    }
  
  abstract var onEnd: () -> Unit
  
  private var onEnd_cxx: Func_void
    @Keep
    @DoNotStrip
    get() {
      return Func_void_java(onEnd)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onEnd = value
    }
  
  abstract var onExternalPlaybackChange: (externalPlaybackActive: Boolean) -> Unit
  
  private var onExternalPlaybackChange_cxx: Func_void_bool
    @Keep
    @DoNotStrip
    get() {
      return Func_void_bool_java(onExternalPlaybackChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onExternalPlaybackChange = value
    }
  
  abstract var onLoad: (data: onLoadData) -> Unit
  
  private var onLoad_cxx: Func_void_onLoadData
    @Keep
    @DoNotStrip
    get() {
      return Func_void_onLoadData_java(onLoad)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onLoad = value
    }
  
  abstract var onLoadStart: (data: onLoadStartData) -> Unit
  
  private var onLoadStart_cxx: Func_void_onLoadStartData
    @Keep
    @DoNotStrip
    get() {
      return Func_void_onLoadStartData_java(onLoadStart)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onLoadStart = value
    }
  
  abstract var onPlaybackStateChange: (data: onPlaybackStateChangeData) -> Unit
  
  private var onPlaybackStateChange_cxx: Func_void_onPlaybackStateChangeData
    @Keep
    @DoNotStrip
    get() {
      return Func_void_onPlaybackStateChangeData_java(onPlaybackStateChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onPlaybackStateChange = value
    }
  
  abstract var onPlaybackRateChange: (rate: Double) -> Unit
  
  private var onPlaybackRateChange_cxx: Func_void_double
    @Keep
    @DoNotStrip
    get() {
      return Func_void_double_java(onPlaybackRateChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onPlaybackRateChange = value
    }
  
  abstract var onProgress: (data: onProgressData) -> Unit
  
  private var onProgress_cxx: Func_void_onProgressData
    @Keep
    @DoNotStrip
    get() {
      return Func_void_onProgressData_java(onProgress)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onProgress = value
    }
  
  abstract var onReadyToDisplay: () -> Unit
  
  private var onReadyToDisplay_cxx: Func_void
    @Keep
    @DoNotStrip
    get() {
      return Func_void_java(onReadyToDisplay)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onReadyToDisplay = value
    }
  
  abstract var onSeek: (seekTime: Double) -> Unit
  
  private var onSeek_cxx: Func_void_double
    @Keep
    @DoNotStrip
    get() {
      return Func_void_double_java(onSeek)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onSeek = value
    }
  
  abstract var onTimedMetadata: (metadata: TimedMetadata) -> Unit
  
  private var onTimedMetadata_cxx: Func_void_TimedMetadata
    @Keep
    @DoNotStrip
    get() {
      return Func_void_TimedMetadata_java(onTimedMetadata)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onTimedMetadata = value
    }
  
  abstract var onTextTrackDataChanged: (texts: Array<String>) -> Unit
  
  private var onTextTrackDataChanged_cxx: Func_void_std__vector_std__string_
    @Keep
    @DoNotStrip
    get() {
      return Func_void_std__vector_std__string__java(onTextTrackDataChanged)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onTextTrackDataChanged = value
    }
  
  abstract var onTrackChange: (track: TextTrack?) -> Unit
  
  private var onTrackChange_cxx: Func_void_std__optional_TextTrack_
    @Keep
    @DoNotStrip
    get() {
      return Func_void_std__optional_TextTrack__java(onTrackChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onTrackChange = value
    }
  
  abstract var onVolumeChange: (data: onVolumeChangeData) -> Unit
  
  private var onVolumeChange_cxx: Func_void_onVolumeChangeData
    @Keep
    @DoNotStrip
    get() {
      return Func_void_onVolumeChangeData_java(onVolumeChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onVolumeChange = value
    }
  
  abstract var onStatusChange: (status: VideoPlayerStatus) -> Unit
  
  private var onStatusChange_cxx: Func_void_VideoPlayerStatus
    @Keep
    @DoNotStrip
    get() {
      return Func_void_VideoPlayerStatus_java(onStatusChange)
    }
    @Keep
    @DoNotStrip
    set(value) {
      onStatusChange = value
    }

  // Methods
  

  private external fun initHybrid(): HybridData

  companion object {
    private const val TAG = "HybridVideoPlayerEventEmitterSpec"
  }
}
