// Copyright © 2022 BytePlusRTC All rights reserved.
// SPDX-License-Identifier: MIT

package com.volcengine.reactnative.vertc;

import android.content.Intent;
import android.util.Log;

import com.facebook.react.bridge.ReactApplicationContext;
import com.ss.bytertc.engine.RTCVideo;
import com.ss.bytertc.engine.VideoEncoderConfig;
import com.ss.bytertc.engine.data.MirrorType;
import com.ss.bytertc.engine.data.ScreenMediaType;
import com.ss.bytertc.engine.live.IPushSingleStreamToCDNObserver;
import com.ss.bytertc.engine.live.PushSingleStreamParam;
import com.ss.bytertc.engine.type.AudioSceneType;

public class VertcHelper {

  final public String TAG = "VertcHelper";
  static public VertcHelper sInstance = new VertcHelper();

  public static VertcHelper getInstance() {
    return sInstance;
  }
  
  public int invokeSetVideoEncoderConfig(RTCVideo engine, VideoEncoderConfig[] channelSolutions) {
    return engine.setVideoEncoderConfig(channelSolutions);
  }

  public int invokeSetLocalVideoMirrorType(RTCVideo engine, int mirrorType) {
    return engine.setLocalVideoMirrorType(MirrorType.fromId(mirrorType));
  }
  
  public int invokeStartPushSingleStreamToCDN(RTCVideo engine, String taskId, PushSingleStreamParam param) {
    IPushSingleStreamToCDNObserver observer = (eventType, taskId1, error) -> {
      Log.d(TAG, "StartPushSingleStreamToCDN: " + eventType + " " + taskId1 + " " + error);
    };
    return engine.startPushSingleStreamToCDN(taskId, param, observer);
  }
  
  public int invokeStartScreenCapture(RTCVideo engine, ScreenMediaType mediaType) {
    try {
      ScreenCaptureHelper helper = new ScreenCaptureHelper();
      helper.registerIntentCallback((Intent intent) -> {
        engine.startScreenCapture(mediaType, intent);
        return 0;
      });
      helper.setup();
      helper.getScreenIntent();
      return 0;
    } catch (Exception e) {
      e.printStackTrace();
      return -1;
    }
  }

  public int invokeSetAudioScene(RTCVideo engine, int scene) {
    try {
      AudioSceneType sceneType = AudioSceneType.fromId(scene);
      return engine.setAudioScene(sceneType);
    } catch (Exception e) {
      e.printStackTrace();
      return -1;
    }
  }
}
