package com.volcengine.reactnative.veplayer;

import android.content.Context;

import androidx.annotation.NonNull;

import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.volcengine.VolcApiEngine.IEventReceiver;
import com.volcengine.reactnative.veplayer.pictureInpicture.PictureInPictureManager;

/**
 * TurboModule implementation for VeplayerModule.
 * Delegates shared logic to VeplayerImpl.
 */
public class VeplayerModule extends NativeVeplayerSpec implements IEventReceiver {
  public static ReactApplicationContext reactApplicationContext = null;
  
  private static final String EVENT_NAME = "VeplayerModule:onEvent";

  private final VeplayerImpl impl;

  VeplayerModule(ReactApplicationContext context) {
    super(context);
    VeplayerModule.reactApplicationContext = context;
    // Provide ReactContext to PiP manager as an optional Activity resolution path.
    PictureInPictureManager.getInstance().setReactContext(context);
    this.impl = new VeplayerImpl(context, this);
  }

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

  @Override
  public boolean newApiEngine() {
    return impl.newApiEngine();
  }

  @Override
  public boolean destroyApiEngine() {
    return impl.destroyApiEngine();
  }

  @Override
  public String callSync(String params) {
    return impl.callApiSync(params);
  }

  @Override
  public void call(String params, Callback callback) {
    impl.callApi(params, callback);
  }

  @Override
  public void addListener(String eventType) {
    // No-op. RN provides default implementation.
  }

  @Override
  public void removeListeners(double count) {
    // No-op. RN provides default implementation.
  }

  @Override
  public void OnEvent(String event, String data) {
    // Emit event to JS
    final com.facebook.react.bridge.WritableMap map = com.facebook.react.bridge.Arguments.createMap();
    map.putString("event", event);
    map.putString("data", data);

    super.getReactApplicationContext()
      .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
      .emit(EVENT_NAME, map);
  }
}
