package com.reactnativebiometricandia;

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

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

import java.util.HashMap;

public class BiometricAndiaModule extends ReactContextBaseJavaModule {

  private static final String E_ACTIVITY_DOES_NOT_EXIST = "E_ACTIVITY_DOES_NOT_EXIST";
  private static final String E_API_KEY_DOES_NOT_EXIST = "E_API_KEY_DOES_NOT_EXIST";
  private static final String E_ACTION_DOES_NOT_EXIST = "E_ACTION_DOES_NOT_EXIST";
  private static final String E_USER_ID_DOES_NOT_EXIST = "E_USER_ID_DOES_NOT_EXIST";

  public static final int REQUEST_SELFIE_ANDIA = 1;

  private Callback mSuccessCallback;
  private Callback mErrorCallback;

  private final ActivityEventListener mActivityEventListener = new BaseActivityEventListener() {
    @Override
    public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
      super.onActivityResult(activity, requestCode, resultCode, data);
      if (requestCode == REQUEST_SELFIE_ANDIA) {

        String message=data.getStringExtra("message");
        Log.e("ANDIA",message);

        String userId=data.getStringExtra("userId");
        String action=data.getStringExtra("action");
        Boolean isMatch =data.getBooleanExtra("isMatch", false);
        WritableNativeMap map = new WritableNativeMap();
      
        map.putString("message", message);
        map.putString("action", action);
        if (action.equals("onboarding")){
          map.putString("userId", userId);
        }
        if (action.equals("validation")){
          map.putBoolean("isMatch", isMatch);
        }
         
        Log.e("ANDIA",action);
        mSuccessCallback.invoke(map);
      }
    }
  };

  public BiometricAndiaModule(ReactApplicationContext reactContext) {
    super(reactContext);
    reactContext.addActivityEventListener(mActivityEventListener);
  }

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


  @ReactMethod
  public void startSDK(ReadableMap params, Callback successCallback, Callback errorCallback) {
    Activity currentActivity = getCurrentActivity();
    mSuccessCallback = successCallback;
    mErrorCallback = errorCallback;

    if (currentActivity == null) {
      mErrorCallback.invoke(E_ACTIVITY_DOES_NOT_EXIST);
      return;
    }
    HashMap paramsMap = params.toHashMap();

    Intent intent = new Intent(currentActivity, BiometricAndiaActivity.class);
    String  apiKey = (String) paramsMap.get("apiKey");
    String  action = (String) paramsMap.get("action");
    String  userId = (String) paramsMap.get("userId");
    if ( apiKey == null || "".equals(apiKey)){
      mErrorCallback.invoke(E_API_KEY_DOES_NOT_EXIST);
      return;
    }
    if ( action == null || "".equals(action)){
      mErrorCallback.invoke(E_ACTION_DOES_NOT_EXIST);
      return;
    }
    if(action.equals("validation") &&  ( userId == null || "".equals(userId))){
      mErrorCallback.invoke(E_USER_ID_DOES_NOT_EXIST);
      return;
    }

    intent.putExtra("apiKey", apiKey);
    intent.putExtra("action", action);
    intent.putExtra("userId", userId);
    currentActivity.startActivityForResult(intent, REQUEST_SELFIE_ANDIA);

  }
}
