package com.castlabs.reactnative.thumbnails;

import android.os.Build;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;

import com.castlabs.reactnative.player.Player;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.module.annotations.ReactModule;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.ViewGroupManager;
import com.facebook.react.uimanager.annotations.ReactProp;
import java.util.Map;

/**
 * The view manager for {@link ThumbnailView}.
 */
@RequiresApi(api = Build.VERSION_CODES.N)
@ReactModule(name = RNPrestoplayThumbnailViewManager.REACT_CLASS)
public class RNPrestoplayThumbnailViewManager extends ViewGroupManager<ThumbnailView> {
  public static final String REACT_CLASS = "RNPrestoplayThumbnailView";

  private final Map<String, Player> playerInstanceManager;

  public RNPrestoplayThumbnailViewManager(
      @NonNull ReactApplicationContext context,
      @NonNull Map<String, Player> playerInstanceManager
  ) {
    this.playerInstanceManager = playerInstanceManager;
  }

  @Override
  public String getName() {
    return REACT_CLASS;
  }

  @Override
  protected ThumbnailView createViewInstance(ThemedReactContext context) {
    return new ThumbnailView(context, null, playerInstanceManager);
  }

  @Override
  public void onDropViewInstance(@NonNull ThumbnailView view) {
    super.onDropViewInstance(view);
  }

  @ReactProp(name = "playerId")
  public void setPlayerId(ThumbnailView view, String id) {
    view.setPlayerId(id);
  }

  /**
   * Loads a thumbnail for the given position.
   *
   * <p>The method is named setPositionMs because
   * setPosition is take by the super class.</p>
   *
   * @param view the thumbnail view
   * @param positionMs the playback position in milliseconds
   */
  @ReactProp(name = "positionMs")
  public void setPositionMs(ThumbnailView view, double positionMs) {
    view.setPositionMs(positionMs);
  }
}
