
package com.xuyazhong.helper;

import com.facebook.react.bridge.BaseActivityEventListener;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.Callback;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.xuyazhong.scan.ScanQRActivity;
import java.util.List;

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

import com.blankj.utilcode.util.ToastUtils;
import com.blankj.utilcode.util.PermissionUtils;
import com.blankj.utilcode.constant.PermissionConstants;
import com.blankj.utilcode.util.ScreenUtils;


public class RNHelperModule extends ReactContextBaseJavaModule {

  private final ReactApplicationContext reactContext;
  private final static int QR_RESULT_CODE = 99;
  private Callback mCallback; // 保存回调

  public RNHelperModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
    reactContext.addActivityEventListener(new BaseActivityEventListener() {
      @Override
      public void onActivityResult(Activity activity, int requestCode, int resultCode, @Nullable Intent data) {
        if (data == null) {
          return;
        }
        if (requestCode == QR_RESULT_CODE) {
          String qr_code = data.getStringExtra("QRCODE");
          if (qr_code != null && qr_code.length() > 0) {
            invokeSuccessWithResult(qr_code);
          }
        }
      }
    });
  }

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


  @ReactMethod
  public void qr(Callback callback) {
    this.mCallback = callback;

    PermissionUtils per = PermissionUtils.permissionGroup(PermissionConstants.CAMERA);
    per.rationale((activity, shouldRequest) -> {
      Log.e("弹窗", "shouldRequest");
    });
    per.callback(new PermissionUtils.FullCallback() {
      @Override
      public void onGranted(@NonNull List<String> granted) {
        Log.e("AAA", "CAMERA is granted");
        realScan();
      }

      @Override
      public void onDenied(@NonNull List<String> deniedForever, @NonNull List<String> denied) {
        if (!deniedForever.isEmpty()) {
          Log.e("AAA", "CAMERA is denied forever");
          ToastUtils.make().show("没有相机权限，请在设置中打开.");
        } else {
          Log.e("AAA", "CAMERA is denied");
          ToastUtils.make().show("没有相机权限，请在设置中打开");
        }
      }
    });
    per.theme(activity -> {
      ScreenUtils.setFullScreen(activity);
    });
    per.request();
  }

  private void realScan() {
    Activity currentActivity = getCurrentActivity();
    Intent intent = new Intent(currentActivity.getApplicationContext(), ScanQRActivity.class);
    currentActivity.startActivityForResult(intent, QR_RESULT_CODE);
  }

  private void invokeSuccessWithResult(String result) {
    if (this.mCallback != null) {
      this.mCallback.invoke(null, result);
      this.mCallback = null;
    }
  }

  private void invokeError(String result) {
    if (this.mCallback != null) {
      this.mCallback.invoke(result, null);
      this.mCallback = null;
    }
  }

}