
/**
 * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
 *
 * Do not edit this file as changes may cause incorrect behavior and will be lost
 * once the code is regenerated.
 *
 * @generated by codegen project: GenerateModuleJavaSpec.js
 *
 * @nolint
 */

package com.escposprinter;

import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.common.build.ReactBuildConfig;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;

public abstract class NativeEscPosPrinterSpec extends ReactContextBaseJavaModule {
  public static final String NAME = "EscPosPrinter";

  public NativeEscPosPrinterSpec(ReactApplicationContext reactContext) {
    super(reactContext);
  }

  @Override
  public @Nonnull String getName() {
    return NAME;
  }

  protected abstract Map<String, Object> getTypedExportedConstants();

  @Override
  @DoNotStrip
  public final @Nullable Map<String, Object> getConstants() {
    Map<String, Object> constants = getTypedExportedConstants();
    if (ReactBuildConfig.DEBUG || ReactBuildConfig.IS_INTERNAL_BUILD) {
      Set<String> obligatoryFlowConstants = new HashSet<>(Arrays.asList(
          "ALIGN_CENTER",
          "ALIGN_LEFT",
          "ALIGN_RIGHT",
          "AUTOCUTTER_ERR",
          "AUTORECOVER_ERR",
          "BARCODE_CODABAR",
          "BARCODE_CODE128",
          "BARCODE_CODE128_AUTO",
          "BARCODE_CODE39",
          "BARCODE_CODE93",
          "BARCODE_EAN13",
          "BARCODE_EAN8",
          "BARCODE_GS1_128",
          "BARCODE_GS1_DATABAR_EXPANDED",
          "BARCODE_GS1_DATABAR_LIMITED",
          "BARCODE_GS1_DATABAR_OMNIDIRECTIONAL",
          "BARCODE_GS1_DATABAR_TRUNCATED",
          "BARCODE_ITF",
          "BARCODE_JAN13",
          "BARCODE_JAN8",
          "BARCODE_UPC_A",
          "BARCODE_UPC_E",
          "BATTERY_OVERHEAT",
          "CODE_ERR_AUTORECOVER",
          "CODE_ERR_BATTERY_LOW",
          "CODE_ERR_COVER_OPEN",
          "CODE_ERR_CUTTER",
          "CODE_ERR_DEVICE_BUSY",
          "CODE_ERR_EMPTY",
          "CODE_ERR_FAILURE",
          "CODE_ERR_ILLEGAL",
          "CODE_ERR_JOB_NOT_FOUND",
          "CODE_ERR_MECHANICAL",
          "CODE_ERR_MEMORY",
          "CODE_ERR_NOT_FOUND",
          "CODE_ERR_PARAM",
          "CODE_ERR_PORT",
          "CODE_ERR_PROCESSING",
          "CODE_ERR_REQUEST_ENTITY_TOO_LARGE",
          "CODE_ERR_SPOOLER",
          "CODE_ERR_SYSTEM",
          "CODE_ERR_TIMEOUT",
          "CODE_ERR_TOO_MANY_REQUESTS",
          "CODE_ERR_UNRECOVERABLE",
          "CODE_ERR_WAIT_REMOVAL",
          "CODE_PRINTING",
          "COLOR_1",
          "COLOR_2",
          "COLOR_3",
          "COLOR_4",
          "COLOR_NONE",
          "COMPRESS_AUTO",
          "COMPRESS_DEFLATE",
          "COMPRESS_NONE",
          "COVER_OPEN",
          "CUT_FEED",
          "CUT_NO_FEED",
          "CUT_RESERVE",
          "DRAWER_2PIN",
          "DRAWER_5PIN",
          "DRAWER_HIGH",
          "DRAWER_LOW",
          "EPOS2_BATTERY_LEVEL_0",
          "EPOS2_BATTERY_LEVEL_1",
          "EPOS2_BATTERY_LEVEL_2",
          "EPOS2_BATTERY_LEVEL_3",
          "EPOS2_BATTERY_LEVEL_4",
          "EPOS2_BATTERY_LEVEL_5",
          "EPOS2_BATTERY_LEVEL_6",
          "ERR_CONNECT",
          "ERR_DISCONNECT",
          "ERR_FAILURE",
          "ERR_ILLEGAL",
          "ERR_INIT",
          "ERR_IN_USE",
          "ERR_MEMORY",
          "ERR_NOT_FOUND",
          "ERR_PARAM",
          "ERR_PROCESSING",
          "ERR_RECOVERY_FAILURE",
          "ERR_TIMEOUT",
          "ERR_TYPE_INVALID",
          "ERR_UNSUPPORTED",
          "FONT_A",
          "FONT_B",
          "FONT_C",
          "FONT_D",
          "FONT_E",
          "FULL_CUT_FEED",
          "FULL_CUT_NO_FEED",
          "FULL_CUT_RESERVE",
          "HALFTONE_DITHER",
          "HALFTONE_ERROR_DIFFUSION",
          "HALFTONE_THRESHOLD",
          "HEAD_OVERHEAT",
          "HIGH_VOLTAGE_ERR",
          "HRI_ABOVE",
          "HRI_BELOW",
          "HRI_BOTH",
          "HRI_NONE",
          "LANG_EN",
          "LANG_JA",
          "LANG_KO",
          "LANG_MULTI",
          "LANG_TH",
          "LANG_VI",
          "LANG_ZH_CN",
          "LANG_ZH_TW",
          "LEVEL_0",
          "LEVEL_1",
          "LEVEL_2",
          "LEVEL_3",
          "LEVEL_4",
          "LEVEL_5",
          "LEVEL_6",
          "LEVEL_7",
          "LEVEL_8",
          "LEVEL_H",
          "LEVEL_L",
          "LEVEL_M",
          "LEVEL_Q",
          "LOW_VOLTAGE_ERR",
          "MECHANICAL_ERR",
          "MODEL_ANK",
          "MODEL_CHINESE",
          "MODEL_KOREAN",
          "MODEL_SOUTHASIA",
          "MODEL_TAIWAN",
          "MODEL_THAI",
          "MODE_GRAY16",
          "MODE_MONO",
          "MODE_MONO_HIGH_DENSITY",
          "MOTOR_OVERHEAT",
          "NO_ERR",
          "PAPER_EMPTY",
          "PAPER_NEAR_END",
          "PAPER_OK",
          "PARAM_DEFAULT",
          "PARAM_UNSPECIFIED",
          "PRINTER_FALSE",
          "PRINTER_SETTING_PAPERWIDTH",
          "PRINTER_SETTING_PAPERWIDTH58_0",
          "PRINTER_SETTING_PAPERWIDTH60_0",
          "PRINTER_SETTING_PAPERWIDTH70_0",
          "PRINTER_SETTING_PAPERWIDTH76_0",
          "PRINTER_SETTING_PAPERWIDTH80_0",
          "PRINTER_SETTING_PRINTDENSITY",
          "PRINTER_SETTING_PRINTDENSITY100",
          "PRINTER_SETTING_PRINTDENSITY105",
          "PRINTER_SETTING_PRINTDENSITY110",
          "PRINTER_SETTING_PRINTDENSITY115",
          "PRINTER_SETTING_PRINTDENSITY120",
          "PRINTER_SETTING_PRINTDENSITY125",
          "PRINTER_SETTING_PRINTDENSITY130",
          "PRINTER_SETTING_PRINTDENSITY70",
          "PRINTER_SETTING_PRINTDENSITY75",
          "PRINTER_SETTING_PRINTDENSITY80",
          "PRINTER_SETTING_PRINTDENSITY85",
          "PRINTER_SETTING_PRINTDENSITY90",
          "PRINTER_SETTING_PRINTDENSITY95",
          "PRINTER_SETTING_PRINTDENSITYDIP",
          "PRINTER_SETTING_PRINTSPEED",
          "PRINTER_SETTING_PRINTSPEED1",
          "PRINTER_SETTING_PRINTSPEED10",
          "PRINTER_SETTING_PRINTSPEED11",
          "PRINTER_SETTING_PRINTSPEED12",
          "PRINTER_SETTING_PRINTSPEED13",
          "PRINTER_SETTING_PRINTSPEED14",
          "PRINTER_SETTING_PRINTSPEED15",
          "PRINTER_SETTING_PRINTSPEED16",
          "PRINTER_SETTING_PRINTSPEED17",
          "PRINTER_SETTING_PRINTSPEED2",
          "PRINTER_SETTING_PRINTSPEED3",
          "PRINTER_SETTING_PRINTSPEED4",
          "PRINTER_SETTING_PRINTSPEED5",
          "PRINTER_SETTING_PRINTSPEED6",
          "PRINTER_SETTING_PRINTSPEED7",
          "PRINTER_SETTING_PRINTSPEED8",
          "PRINTER_SETTING_PRINTSPEED9",
          "PRINTER_TRUE",
          "PULSE_100",
          "PULSE_200",
          "PULSE_300",
          "PULSE_400",
          "PULSE_500",
          "REMOVAL_DETECT_PAPER",
          "REMOVAL_DETECT_PAPER_NONE",
          "REMOVAL_DETECT_UNKNOWN",
          "REMOVAL_WAIT_NONE",
          "REMOVAL_WAIT_PAPER",
          "SWITCH_OFF",
          "SWITCH_ON",
          "SYMBOL_AZTECCODE_COMPACT",
          "SYMBOL_AZTECCODE_FULLRANGE",
          "SYMBOL_DATAMATRIX_RECTANGLE_12",
          "SYMBOL_DATAMATRIX_RECTANGLE_16",
          "SYMBOL_DATAMATRIX_RECTANGLE_8",
          "SYMBOL_DATAMATRIX_SQUARE",
          "SYMBOL_GS1_DATABAR_EXPANDED_STACKED",
          "SYMBOL_GS1_DATABAR_STACKED",
          "SYMBOL_GS1_DATABAR_STACKED_OMNIDIRECTIONAL",
          "SYMBOL_MAXICODE_MODE_2",
          "SYMBOL_MAXICODE_MODE_3",
          "SYMBOL_MAXICODE_MODE_4",
          "SYMBOL_MAXICODE_MODE_5",
          "SYMBOL_MAXICODE_MODE_6",
          "SYMBOL_PDF417_STANDARD",
          "SYMBOL_PDF417_TRUNCATED",
          "SYMBOL_QRCODE_MICRO",
          "SYMBOL_QRCODE_MODEL_1",
          "SYMBOL_QRCODE_MODEL_2",
          "UNKNOWN",
          "UNRECOVER_ERR",
          "WRONG_PAPER"
      ));
      Set<String> optionalFlowConstants = new HashSet<>();
      Set<String> undeclaredConstants = new HashSet<>(constants.keySet());
      undeclaredConstants.removeAll(obligatoryFlowConstants);
      undeclaredConstants.removeAll(optionalFlowConstants);
      if (!undeclaredConstants.isEmpty()) {
        throw new IllegalStateException(String.format("Native Module Flow doesn't declare constants: %s", undeclaredConstants));
      }
      undeclaredConstants = obligatoryFlowConstants;
      undeclaredConstants.removeAll(constants.keySet());
      if (!undeclaredConstants.isEmpty()) {
        throw new IllegalStateException(String.format("Native Module doesn't fill in constants: %s", undeclaredConstants));
      }
    }
    return constants;
  }

  @ReactMethod
  @DoNotStrip
  public abstract void initWithPrinterDeviceName(String target, String deviceName, double lang, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void connect(String target, double timeout, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void disconnect(String target, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void clearCommandBuffer(String target, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addText(String target, String data, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addTextLang(String target, double lang, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addFeedLine(String target, double line, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addLineSpace(String target, double linespc, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addCut(String target, double type, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void sendData(String target, double timeout, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void getPrinterSetting(String target, double timeout, double type, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void getStatus(String target, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addImage(String target, ReadableMap source, double width, double color, double mode, double halftone, double brightness, double compress, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addBarcode(String target, String data, double type, double hri, double font, double width, double height, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addSymbol(String target, String data, double type, double level, double width, double height, double size, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addCommand(String target, String data, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addPulse(String target, double drawer, double time, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addTextAlign(String target, double align, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addTextSize(String target, double width, double height, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addTextSmooth(String target, double smooth, Promise promise);

  @ReactMethod
  @DoNotStrip
  public abstract void addTextStyle(String target, double reverse, double ul, double em, double color, Promise promise);
}
