
package com.reactlibrary;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.baidu.idl.face.platform.FaceConfig;
import com.baidu.idl.face.platform.FaceEnvironment;
import com.baidu.idl.face.platform.FaceSDKManager;
import com.facebook.react.bridge.ActivityEventListener;
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;

public class RNBaiduFaceModule extends ReactContextBaseJavaModule {

    private final ReactApplicationContext reactContext;
    private Callback jscallback = null;

    private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() {

        @Override
        public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent intent) {
            if (requestCode == 1) {
                if(jscallback !=  null){
                    System.out.print("wo ca ,xianzai jiu zhi xing le ?");
                    if(intent != null && intent.getStringExtra("base64") != null){
                        String result = intent.getStringExtra("base64");//得到新Activity 关闭后返回的数据
                        jscallback.invoke(null,result);
                    }
                }
            }
        }
    };


    public RNBaiduFaceModule(ReactApplicationContext reactContext) {
        super(reactContext);
        reactContext.addActivityEventListener(mActivityEventListener);
        this.reactContext = reactContext;

    }

    public static void initSdk(Context context, String licenId ,String fname){
        initLib(context,licenId,fname);
    }



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

    @ReactMethod
    public void livenessWithCallBack(Callback callback) {
        this.jscallback = callback;
        if (ContextCompat.checkSelfPermission(this.reactContext, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){

            ActivityCompat.requestPermissions(this.reactContext.getCurrentActivity(), new String[]{Manifest.permission.CAMERA}, 101);
        }else {
            Activity currentActivity = getCurrentActivity();
            setFaceConfig();
            Intent intent=new Intent(this.reactContext, FaceLivenessExpActivity.class);
//            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//            this.reactContext.startActivity(intent);
            currentActivity.startActivityForResult(intent,1);
        }
    }



    @ReactMethod
    public void detectWithCallBack(Callback callback) {
        this.jscallback = callback;
        if (ContextCompat.checkSelfPermission(this.reactContext, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED){

            ActivityCompat.requestPermissions(this.reactContext.getCurrentActivity(), new String[]{Manifest.permission.CAMERA}, 101);
        }else {
            Activity currentActivity = getCurrentActivity();
            setFaceConfig();
            Intent intent=new Intent(this.reactContext, FaceDetectExpActivity.class);
//            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            currentActivity.startActivityForResult(intent,1);
        }
    }

    public static void initLib(Context context, String licenseId, String lfname){
        FaceSDKManager.getInstance().initialize(context,licenseId, lfname);
    }

    /**
     * 初始化SDK
     */
    private void initLib(Context context) {
        // 为了android和ios 区分授权，appId=appname_face_android ,其中appname为申请sdk时的应用名
        // 应用上下文
        // 申请License取得的APPID
        // assets目录下License文件名
//        FaceSDKManager.getInstance().initialize(context, Config.licenseID, Config.licenseFileName);
//        setFaceConfig();
    }

    private void setFaceConfig() {
        FaceConfig config = FaceSDKManager.getInstance().getFaceConfig();
        // SDK初始化已经设置完默认参数（推荐参数），您也根据实际需求进行数值调整
        config.setLivenessTypeList(ExampleApplication.livenessList);
        config.setLivenessRandom(ExampleApplication.isLivenessRandom);
        config.setBlurnessValue(FaceEnvironment.VALUE_BLURNESS);
        config.setBrightnessValue(FaceEnvironment.VALUE_BRIGHTNESS);
        config.setCropFaceValue(FaceEnvironment.VALUE_CROP_FACE_SIZE);
        config.setHeadPitchValue(FaceEnvironment.VALUE_HEAD_PITCH);
        config.setHeadRollValue(FaceEnvironment.VALUE_HEAD_ROLL);
        config.setHeadYawValue(FaceEnvironment.VALUE_HEAD_YAW);
        config.setMinFaceSize(FaceEnvironment.VALUE_MIN_FACE_SIZE);
        config.setNotFaceValue(FaceEnvironment.VALUE_NOT_FACE_THRESHOLD);
        config.setOcclusionValue(FaceEnvironment.VALUE_OCCLUSION);
        config.setCheckFaceQuality(true);
        config.setFaceDecodeNumberOfThreads(2);
        FaceSDKManager.getInstance().setFaceConfig(config);
    }

}