package com.myhommer.qpay;
import android.app.Activity;
import android.content.Intent;
import android.support.annotation.Nullable;

import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.Arguments;
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.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.qpay.qpayandroidsdk.base.QpaySdk;

import java.math.BigDecimal;


public  class ReactNativeQpayModule extends ReactContextBaseJavaModule implements ActivityEventListener {

    private static ReactApplicationContext reactContext = null;
    QpaySdk reqParams = null  ;

    public ReactNativeQpayModule(ReactApplicationContext reactContext) {
        super(reactContext);
        reactContext.addActivityEventListener(this);
    }

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

    private void sendEvent(String eventName, @Nullable WritableMap eventData) {
        reactContext = getReactApplicationContext();

        reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
                .emit(eventName, eventData);
    }
    @ReactMethod
    @SuppressWarnings("unused")
    public void payNow(ReadableMap params) {

        try {
            String currency = params.getString("currency");
            String country = params.getString("country");
            String city = params.getString("city");
            String state = params.getString("state");
            String email = params.getString("email");
            String address = params.getString("address");
            String name = params.getString("name");
            String phone = params.getString("phone");
            String amount = params.getString("amount");
            String description = params.getString("description");
            String referenceid = params.getString("referenceid");
            String gatewayid = params.getString("gatewayid");
            String secretkey = params.getString("secretkey");
            String mode = params.getString("mode");

            reqParams = new QpaySdk(getCurrentActivity());
            reqParams.setCurrency(currency);
            reqParams.setCountry(country); // 2 digit of country code
            reqParams.setCity(city);
            reqParams.setState(state);
            reqParams.setEmail(email);
            reqParams.setAddress(address);
            reqParams.setName(name);
            reqParams.setPhone(phone);
            reqParams.setAmount(BigDecimal.valueOf(Double.valueOf(amount)));
            reqParams.setDescription(description);
            reqParams.setReferenceId(referenceid);
            reqParams.setGatewayId(gatewayid);
            reqParams.setSecretKey(secretkey);
            reqParams.setMode(mode);

            // call payment method
            reqParams.doPayment();
        }
        catch (Exception ex)
        {
            WritableMap errorParams = Arguments.createMap();
            errorParams.putString("errorDescription", ex.getMessage());
            sendEvent("QPay::PAYMENT_ERROR", errorParams );
        }
    }


    @Override
    public void onActivityResult( int requestCode, int resultCode, Intent data) {
        WritableMap event = Arguments.createMap();

        if (requestCode == 101 && data != null)
        {
            String dataString = data.getStringExtra("data");
            dataString = dataString.replace("?", "{\"").replace("=", "\":\"").replace("&", "\",\"");

            //SdkUtils.showAlertPopUp(getCurrentActivity(), dataString);

            event.putString("dataString", dataString);
            sendEvent("QPay::PAYMENT_SUCCESS", event);
        }
    }

   
}
