package com.reactnativepayengine;

import androidx.annotation.NonNull;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.reactnativepayengine.collect.VGSCollectModule;
import com.reactnativepayengine.collect.VGSCollectOnCreateViewInstanceListener;
import com.reactnativepayengine.collect.fields.VGSCVCField;
import com.reactnativepayengine.collect.fields.VGSCardHolderNameField;
import com.reactnativepayengine.collect.fields.VGSCardNumberField;
import com.reactnativepayengine.collect.fields.VGSExpDateField;
import com.reactnativepayengine.collect.fields.VGSTextField;
import com.reactnativepayengine.collect.fields.VGSZipCodeField;
import com.verygoodsecurity.vgscollect.view.InputFieldView;

import java.util.ArrayList;
import java.util.List;

public class PayenginePackage implements ReactPackage, VGSCollectOnCreateViewInstanceListener {

  private VGSCollectModule module;

  public VGSCollectOnCreateViewInstanceListener getListener() {
    return this;
  }

  public VGSCollectModule getVGSCollectModule() {
    return module;
  }


  @NonNull
  @Override
  public List<NativeModule> createNativeModules(@NonNull ReactApplicationContext reactContext) {
    module = new VGSCollectModule(reactContext);

    List<NativeModule> modules = new ArrayList<>();
    modules.add(new PayengineModule(reactContext));
    modules.add(module);

    return modules;
  }

  @NonNull
  @Override
  public List<ViewManager> createViewManagers(@NonNull ReactApplicationContext reactContext) {
    List<ViewManager> views = new ArrayList<>();
    views.add(new VGSExpDateField(this, reactContext));
    views.add(new VGSCardNumberField(this, reactContext));
    views.add(new VGSCardHolderNameField(this, reactContext));
    views.add(new VGSCVCField(this, reactContext));
    views.add(new VGSZipCodeField(this, reactContext));
    views.add(new VGSTextField(this, reactContext));
    return views;
  }

  @Override
  public void onCreateViewInstance(InputFieldView inputFieldView) {
    module.bindView(inputFieldView);
  }
}
