
package com.zedunes.tap;

import android.util.Log;

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 com.facebook.react.bridge.Promise;

import company.tap.gosellapi.api.requests.CardRequest;
import company.tap.gosellapi.api.model.Token;
import company.tap.gosellapi.api.facade.APIRequestCallback;
import company.tap.gosellapi.api.facade.GoSellAPI;
import company.tap.gosellapi.api.facade.GoSellError;

public class RNTapGosellModule extends ReactContextBaseJavaModule {

  private final ReactApplicationContext reactContext;

  public RNTapGosellModule(ReactApplicationContext reactContext) {
    super(reactContext);
    this.reactContext = reactContext;
  }

  /**
   * PUBLIC REACT API
   *
   *  createToken()   Returns generated token
  */
  @ReactMethod
  public void createToken(final Promise promise) {
      GoSellAPI.getInstance("sk_test_XKokBfNWv6FIYuTMg5sLPjhJ").createToken(
        new CardRequest
                .Builder("4111111111111111", "10", "20", "123", "-----BEGIN PUBLIC KEY----- MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEA21z7Vcrrraiksj31If5K f7XGv6QNoHP7SRPjxxbxAnPrrI597NI683pHIaIgb0UNaOUggU6FYN+w+tBc1Mwk 1aOBsM8Ok6W0SsFxpa+Jt3VdOfF4iBw7k4sdd+EP5PfaiFdbrndRcCmV32mb87+I cuzDRxyqgl1Bx0dCPqmw0YCCWTuM+LXN60MHr56M5WO7J64AXn5YVzspZkon4Leg d9QbycUC77e/MUmhZL5QcGvXaBYWS5Lw5ROhjMYrLK15f4gWoYLtDcUTtMEEEtef EF4tus0Vx7XTrHa9vGbH9qUmH5F9HUkYOUX+UaFj7qVdfaR/VecB5xCwrt5ixV6y 3QIBEQ== -----END PUBLIC KEY-----")
                .address_city("Some city")
                .address_line1("First line")
                .address_line2("Second line")
                .address_state("Royal State")
                .address_zip("007")
                .address_country("Some country")
                .name("Testing VISA card")
                .build(),
        new APIRequestCallback<Token>() {
                  @Override
                    public void onSuccess(int responseCode, Token serializedResponse) {
                        synchronized (this) {
                            promise.resolve(serializedResponse.getId());
                        }
                    }

                    @Override
                    public void onFailure(GoSellError errorDetails) {
                      Log.d("MYAPP", "onFailure createToken, errorCode: " + errorDetails.getErrorCode() + ", errorBody: " + errorDetails.getErrorBody() + ", throwable: " + errorDetails.getThrowable());
                        promise.reject("ERR_UNEXPECTED_EXCEPTION");
                    }
                });
  }

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