package com.reactnativepayengine.collect.fields;

import android.graphics.Rect;
import android.graphics.drawable.Drawable;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
import com.reactnativepayengine.collect.VGSCollectOnCreateViewInstanceListener;
import com.verygoodsecurity.vgscollect.view.card.CardType;
import com.verygoodsecurity.vgscollect.view.cvc.CVCIconAdapter;
import com.verygoodsecurity.vgscollect.widget.CardVerificationCodeEditText;
import com.verygoodsecurity.vgscollect.widget.VGSCardNumberEditText;
import com.verygoodsecurity.vgscollect.widget.VGSTextInputLayout;

import org.jetbrains.annotations.NotNull;

public class VGSCVCField extends SimpleViewManager<VGSTextInputLayout> {
  private final VGSCollectOnCreateViewInstanceListener listener;

  private CardVerificationCodeEditText editText;
  private VGSTextInputLayout vgsTextInputLayout;

  ReactApplicationContext mCallerContext;

  public VGSCVCField(VGSCollectOnCreateViewInstanceListener listener, ReactApplicationContext reactContext) {
    this.listener = listener;
    mCallerContext = reactContext;
  }

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

  @NonNull
  @Override
  protected VGSTextInputLayout createViewInstance(@NonNull ThemedReactContext reactContext) {
    vgsTextInputLayout = new VGSTextInputLayout(reactContext);
    vgsTextInputLayout.setHint("CVC");
    editText = new CardVerificationCodeEditText(reactContext);
    editText.setIsRequired(true);
    editText.setFieldName("card_cvc");
    CVCIconAdapter adapter = new CVCIconAdapter(reactContext) {
      @Override
      protected Drawable getIcon(@NotNull CardType cardType, @Nullable String cardBrand, int cvcLength, @NotNull Rect r) {
        return super.getIcon(cardType, cardBrand, cvcLength, r);
      }
    };
    editText.setPreviewIconAdapter(adapter);
    editText.setPadding(10, 0, 10, 0);

    vgsTextInputLayout.addView(editText);

    this.listener.onCreateViewInstance(editText);
    return vgsTextInputLayout;
  }

  @ReactProp(name = "placeholder")
  public void setPlaceholder(VGSTextInputLayout view, @Nullable String placeholder) {
    vgsTextInputLayout.setHint(placeholder);
  }
}
