///
/// HybridVideoViewViewManagerSpec.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 VideoViewViewManager HybridObject.
 * Implement this abstract class to create Kotlin-based instances of VideoViewViewManager.
 */
@DoNotStrip
@Keep
@Suppress(
  "KotlinJniMissingFunction", "unused",
  "RedundantSuppression", "RedundantUnitReturnType", "SimpleRedundantLet",
  "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName"
)
abstract class HybridVideoViewViewManagerSpec: HybridObject() {
  @DoNotStrip
  private var mHybridData: HybridData = initHybrid()

  init {
    super.updateNative(mHybridData)
  }

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

  // Properties
  @get:DoNotStrip
  @get:Keep
  @set:DoNotStrip
  @set:Keep
  abstract var player: HybridVideoPlayerSpec?
  
  @get:DoNotStrip
  @get:Keep
  @set:DoNotStrip
  @set:Keep
  abstract var controls: Boolean
  
  @get:DoNotStrip
  @get:Keep
  @set:DoNotStrip
  @set:Keep
  abstract var pictureInPicture: Boolean
  
  @get:DoNotStrip
  @get:Keep
  @set:DoNotStrip
  @set:Keep
  abstract var autoEnterPictureInPicture: Boolean
  
  @get:DoNotStrip
  @get:Keep
  @set:DoNotStrip
  @set:Keep
  abstract var resizeMode: ResizeMode
  
  @get:DoNotStrip
  @get:Keep
  @set:DoNotStrip
  @set:Keep
  abstract var keepScreenAwake: Boolean
  
  abstract var onPictureInPictureChange: ((isInPictureInPicture: Boolean) -> Unit)?
  
  private var onPictureInPictureChange_cxx: Func_void_bool?
    @Keep
    @DoNotStrip
    get() {
      return onPictureInPictureChange?.let { Func_void_bool_java(it) }
    }
    @Keep
    @DoNotStrip
    set(value) {
      onPictureInPictureChange = value?.let { it }
    }
  
  abstract var onFullscreenChange: ((fullscreen: Boolean) -> Unit)?
  
  private var onFullscreenChange_cxx: Func_void_bool?
    @Keep
    @DoNotStrip
    get() {
      return onFullscreenChange?.let { Func_void_bool_java(it) }
    }
    @Keep
    @DoNotStrip
    set(value) {
      onFullscreenChange = value?.let { it }
    }
  
  abstract var willEnterFullscreen: (() -> Unit)?
  
  private var willEnterFullscreen_cxx: Func_void?
    @Keep
    @DoNotStrip
    get() {
      return willEnterFullscreen?.let { Func_void_java(it) }
    }
    @Keep
    @DoNotStrip
    set(value) {
      willEnterFullscreen = value?.let { it }
    }
  
  abstract var willExitFullscreen: (() -> Unit)?
  
  private var willExitFullscreen_cxx: Func_void?
    @Keep
    @DoNotStrip
    get() {
      return willExitFullscreen?.let { Func_void_java(it) }
    }
    @Keep
    @DoNotStrip
    set(value) {
      willExitFullscreen = value?.let { it }
    }
  
  abstract var willEnterPictureInPicture: (() -> Unit)?
  
  private var willEnterPictureInPicture_cxx: Func_void?
    @Keep
    @DoNotStrip
    get() {
      return willEnterPictureInPicture?.let { Func_void_java(it) }
    }
    @Keep
    @DoNotStrip
    set(value) {
      willEnterPictureInPicture = value?.let { it }
    }
  
  abstract var willExitPictureInPicture: (() -> Unit)?
  
  private var willExitPictureInPicture_cxx: Func_void?
    @Keep
    @DoNotStrip
    get() {
      return willExitPictureInPicture?.let { Func_void_java(it) }
    }
    @Keep
    @DoNotStrip
    set(value) {
      willExitPictureInPicture = value?.let { it }
    }

  // Methods
  @DoNotStrip
  @Keep
  abstract fun enterFullscreen(): Unit
  
  @DoNotStrip
  @Keep
  abstract fun exitFullscreen(): Unit
  
  @DoNotStrip
  @Keep
  abstract fun enterPictureInPicture(): Unit
  
  @DoNotStrip
  @Keep
  abstract fun exitPictureInPicture(): Unit
  
  @DoNotStrip
  @Keep
  abstract fun canEnterPictureInPicture(): Boolean

  private external fun initHybrid(): HybridData

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