
package com.paymentsdk;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.widget.Toast;

import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.Promise;
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 org.json.JSONException;
import org.json.JSONObject;

import vn.mservice.MoMo_Partner.MoMoConfig;
import vn.mservice.MoMo_Partner.MoMoPayment;
import vn.mservice.MoMo_Partner.MoMoProgressBar;

public class RNPaymentSdkModule extends ReactContextBaseJavaModule {

    private static MoMoProgressBar progressBar;
    private Promise paymentPromise;

    private static final String E_ACTIVITY_DOES_NOT_EXIST = "E_ACTIVITY_DOES_NOT_EXIST";


    public RNPaymentSdkModule(ReactApplicationContext reactContext) {
        super(reactContext);
        reactContext.addActivityEventListener(activityEventListener);
    }

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


    @ReactMethod
    public void rechargeMomo(Double amount, Double fee, String userName, String bundleID,
                             String merchantCode, String merchantID,
                             String merchantName, String merchantNameLabel,
                             String merchantPublicKey, Promise promise) {

        final Activity activity = getCurrentActivity();
        if (activity == null) {
            promise.reject(E_ACTIVITY_DOES_NOT_EXIST, E_ACTIVITY_DOES_NOT_EXIST);
            return;
        }

        paymentPromise = promise;

        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (progressBar == null) {
                    progressBar = new MoMoProgressBar();
                }
                progressBar.showProgessDialog(activity, "Đang gọi ứng dụng MoMo");
                progressBar.forceDimissProgessDialog(MoMoConfig.TIMEOUT_PAYMENT_PROCESS);
            }
        });

        int total = (int) (amount + fee);
        MoMoPayment.requestToken(activity, total,//amount
                0,//fee
                merchantName,//description
                userName,//userName
                merchantCode,//merchant code
                merchantNameLabel,//merchantNameLabel
                merchantName,//merchantName
                null);//JSONObject
    }


    private ActivityEventListener activityEventListener = new ActivityEventListener() {
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == MoMoConfig.GET_INFO) {
                parseData(getCurrentActivity(), requestCode, resultCode, data);
            }
        }
    };

    public void parseData(final Activity mActivity, int requestCode, int resultCode, Intent data) {
        mActivity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (progressBar != null) {
                    progressBar.dimissProgessDialog();
                }
            }
        });
        if (resultCode == Activity.RESULT_OK) {
            if (data != null) {
                if (data.getIntExtra(MoMoConfig.STATUS, -1) == 0) {
                    String token = data.getStringExtra(MoMoConfig.DATA);
                    if (token != null && !token.equals("")) {
                        try {

                            JSONObject jsonObject = new JSONObject();
                            jsonObject.put("phone", data.getStringExtra("phonenumber"));
                            jsonObject.put("app_data", token);
                            paymentPromise.resolve(jsonObject);
                        } catch (JSONException e) {
                            e.printStackTrace();
                            paymentPromise.reject("-2", "JSONException");
                        }
                    } else {
                        paymentPromise.reject("-2", "Không nhận được thông tin giao dịc từ MoMo");
                    }
                } else if (data.getIntExtra(MoMoConfig.STATUS, -1) == -1) {//Trường hợp gọi qua app version cũ
                    paymentPromise.reject("-1", "Vui lòng cập nhật ứng dụng MoMo Chuyển nhận tiền phiên bản mới nhất");
                } else if (data.getIntExtra(MoMoConfig.STATUS, -1) == 4) {
                    openApp(mActivity, "com.mservice.momotransfer");
                }
            } else {
                openApp(mActivity, "com.mservice.momotransfer");
            }
        } else {
            paymentPromise.reject("-2", "Không nhận được thông tin giao dịc từ MoMo");
        }

    }

    public boolean openApp(Context context, String packageName) {
        PackageManager manager = context.getPackageManager();
        try {
            Intent i = manager.getLaunchIntentForPackage(packageName);
            if (i == null) {
                return false;
            }
            i.addCategory(Intent.CATEGORY_LAUNCHER);
            context.startActivity(i);
            return true;
        } catch (Exception e) {
            return false;
        }
    }




}