package com.castlabs.reactnative.thumbnails;

import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;

import com.castlabs.reactnative.PrestoPlayPackage;
import com.castlabs.reactnative.thumbnails.RNPrestoplayThumbnailViewManager;
import com.facebook.react.BaseReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.module.model.ReactModuleInfoProvider;
import com.facebook.react.uimanager.ViewManager;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Bundles media views and modules.
 */
@RequiresApi(api = Build.VERSION_CODES.N)
public class RNPrestoplayThumbnailPackage extends BaseReactPackage {

  @NonNull
  @Override
  public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext context) {
    return List.of(
        new RNPrestoplayThumbnailViewManager(context, PrestoPlayPackage.playerInstanceManager)
    );
  }

  @Nullable
  @Override
  public NativeModule getModule(@NonNull String name, @NonNull ReactApplicationContext reactApplicationContext) {
    /*
      Bridge (old) architecture
    */
    if (name.equals(RNPrestoplayThumbnailPluginFactory.REACT_CLASS)) {
      return new RNPrestoplayThumbnailPluginFactory(reactApplicationContext);
    }
    return null;
  }

  @NonNull
  @Override
  public ReactModuleInfoProvider getReactModuleInfoProvider() {
    return new ReactModuleInfoProvider() {
      @NonNull
      @Override
      public Map<String, ReactModuleInfo> getReactModuleInfos() {
        Map<String, ReactModuleInfo> map = new HashMap<>();
        map.put(RNPrestoplayThumbnailPluginFactory.REACT_CLASS, new ReactModuleInfo(
                RNPrestoplayThumbnailPluginFactory.REACT_CLASS, // name
                RNPrestoplayThumbnailPluginFactory.REACT_CLASS, // className
                false, // canOverrideExistingModule
                false, // needsEagerInit
                false, // isCXXModule
                false  // isTurboModule
        ));
        return map;
      }
    };
  }
}
