package com.reactnativepayengine.collect.fields;

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.validation.rules.VGSInfoRule;
import com.verygoodsecurity.vgscollect.widget.ExpirationDateEditText;
import com.verygoodsecurity.vgscollect.widget.VGSEditText;
import com.verygoodsecurity.vgscollect.widget.VGSTextInputLayout;

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

  private VGSEditText editText;
  private VGSTextInputLayout vgsTextInputLayout;

  ReactApplicationContext mCallerContext;

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

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

  @NonNull
  @Override
  protected VGSTextInputLayout createViewInstance(@NonNull ThemedReactContext reactContext) {
    vgsTextInputLayout = new VGSTextInputLayout(reactContext);
    vgsTextInputLayout.setHint("Zip code");
    editText = new VGSEditText(reactContext);
    editText.setIsRequired(true);
    editText.setFieldName("address_zip");
    VGSInfoRule rule = new VGSInfoRule.ValidationBuilder()
      .setRegex("^(\\d{5}(-\\d{4})?|[a-z]\\d[a-z][- ]*\\d[a-z]\\d)$")
      .setAllowableMinLength(1)
      .setAllowableMaxLength(8)
      .build();
    editText.setRule(rule);
    editText.enableValidation(true);
    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);
  }
}

