package com.madstripesdk;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.stripe.stripeterminal.external.models.PaymentIntent;

class NativePaymentIntent {

  private String stripeId;
  private long created;
  private int status;
  private long amount;
  private String currency;

  public String getStripeId() {
    return stripeId;
  }

  public void setStripeId(String stripeId) {
    this.stripeId = stripeId;
  }

  public long getCreated() {
    return created;
  }

  public void setCreated(long created) {
    this.created = created;
  }

  public int getStatus() {
    return status;
  }

  public void setStatus(int status) {
    this.status = status;
  }

  public long getAmount() {
    return amount;
  }

  public void setAmount(long amount) {
    this.amount = amount;
  }

  public String getCurrency() {
    return currency;
  }

  public void setCurrency(String currency) {
    this.currency = currency;
  }

  public NativePaymentIntent(PaymentIntent intent) {
    this.stripeId = intent.getId();
    this.created = intent.getCreated();

    int status = 0;
    if (null != intent.getStatus()) {
      switch (intent.getStatus()) {
        case REQUIRES_PAYMENT_METHOD:
          break;
        case CANCELED:
          status = 4;
          break;
        case REQUIRES_CAPTURE:
          status = 2;
          break;
        case REQUIRES_CONFIRMATION:
          status = 1;
          break;
        case SUCCEEDED:
          status = 5;
          break;
      }
    }
    this.status = status;

    this.amount = intent.getAmount();
    this.currency = intent.getCurrency();
  }

  public ReadableMap map() {
    final WritableMap map = Arguments.createMap();
    map.putString("stripeId", stripeId);
    map.putInt("created", (int) created);
    map.putInt("status", status);
    map.putInt("amount", (int) amount);
    map.putString("currency", currency);
    return map;
  }

}
