
package com.reactlibrary;

import android.util.Log;

import androidx.annotation.Nullable;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.UiThreadUtil;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.google.android.gms.cast.CastMediaControlIntent;
import com.google.android.libraries.cast.companionlibrary.cast.CastConfiguration;
import com.google.android.libraries.cast.companionlibrary.cast.VideoCastManager;
import com.google.android.libraries.cast.companionlibrary.cast.callbacks.VideoCastConsumer;
import com.google.android.libraries.cast.companionlibrary.cast.callbacks.VideoCastConsumerImpl;
import com.example.mylibrary.MyLibraryClass;

public class RNChromecastLibraryModule extends ReactContextBaseJavaModule {

  private final ReactApplicationContext reactContext;

  public static final String REACT_CLASS = "RNGoogleCast";

  public RNChromecastLibraryModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
  }

  @ReactMethod
  public void startScan() {
    final CastConfiguration options = getCastConfig();
    new MyLibraryClass().printLog();

//    UiThreadUtil.runOnUiThread(new Runnable() {
//      @Override
//      public void run() {
//        VideoCastManager.initialize(getCurrentActivity(), options);
//        VideoCastManager mCastManager = VideoCastManager.getInstance();
//
//        VideoCastConsumer mCastConsumer = new VideoCastConsumerImpl() {
//          @Override
//          public void onCastAvailabilityChanged(boolean castPresent) {
//            WritableMap deviceAvailableParams = Arguments.createMap();
//
//            deviceAvailableParams
//                    .putBoolean("device_available", castPresent);
//
//            emitMessageToRN(
//                    getReactApplicationContext(),
//                    "GoogleCast:DeviceAvailable",
//                    deviceAvailableParams
//            );
//          }
//        };
//
//        mCastManager.addVideoCastConsumer(mCastConsumer);
//      }
//    });

    Log.d(REACT_CLASS, "start scan Chromecast npm module");
  }

  public CastConfiguration getCastConfig(){
    CastConfiguration options =
            new CastConfiguration
                    .Builder(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID)
                    .enableAutoReconnect()
                    .enableNotification()
                    .build();
    return options;
  }

  private void emitMessageToRN(ReactContext reactContext,
                               String eventName,
                               @Nullable WritableMap params) {
    reactContext
            .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
            .emit(eventName, params);
  }

  @Override
  public String getName() {
    return "RNChromecastLibrary";
  }
}