///
/// PTError.hpp
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © Marc Rousavy @ Margelo
///

#pragma once

#if __has_include(<NitroModules/JSIConverter.hpp>)
#include <NitroModules/JSIConverter.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif
#if __has_include(<NitroModules/NitroDefines.hpp>)
#include <NitroModules/NitroDefines.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif

namespace margelo::nitro::espprovtoolkit {

  /**
   * An enum which can be represented as a JavaScript enum (PTError).
   */
  enum class PTError {
    WIFI_SCAN_EMPTY_CONFIG_DATA      SWIFT_NAME(wifiScanEmptyConfigData) = 1,
    WIFI_SCAN_EMPTY_RESULT_COUNT      SWIFT_NAME(wifiScanEmptyResultCount) = 2,
    WIFI_SCAN_REQUEST_ERROR      SWIFT_NAME(wifiScanRequestError) = 3,
    SESSION_INIT_ERROR      SWIFT_NAME(sessionInitError) = 11,
    SESSION_NOT_ESTABLISHED      SWIFT_NAME(sessionNotEstablished) = 12,
    SESSION_SEND_DATA_ERROR      SWIFT_NAME(sessionSendDataError) = 13,
    SOFTAP_CONNECTION_FAILURE      SWIFT_NAME(softapConnectionFailure) = 14,
    SESSION_SECURITY_MISMATCH      SWIFT_NAME(sessionSecurityMismatch) = 15,
    SESSION_VERSION_INFO_ERROR      SWIFT_NAME(sessionVersionInfoError) = 16,
    BLE_FAILED_TO_CONNECT      SWIFT_NAME(bleFailedToConnect) = 17,
    ENCRYPTION_ERROR      SWIFT_NAME(encryptionError) = 18,
    NO_POP      SWIFT_NAME(noPop) = 19,
    NO_USERNAME      SWIFT_NAME(noUsername) = 20,
    CAMERA_NOT_AVAILABLE      SWIFT_NAME(cameraNotAvailable) = 21,
    CAMERA_ACCESS_DENIED      SWIFT_NAME(cameraAccessDenied) = 22,
    AV_CAPTURE_DEVICE_INPUT_ERROR      SWIFT_NAME(avCaptureDeviceInputError) = 23,
    VIDEO_INPUT_ERROR      SWIFT_NAME(videoInputError) = 24,
    VIDEO_OUTPUT_ERROR      SWIFT_NAME(videoOutputError) = 25,
    INVALID_QR_CODE      SWIFT_NAME(invalidQrCode) = 26,
    BLE_SEARCH_ERROR      SWIFT_NAME(bleSearchError) = 46,
    ESP_DEVICE_NOT_FOUND      SWIFT_NAME(espDeviceNotFound) = 27,
    AP_SEARCH_NOT_SUPPORTED      SWIFT_NAME(apSearchNotSupported) = 28,
    PROV_SESSION_ERROR      SWIFT_NAME(provSessionError) = 31,
    PROV_CONFIGURATION_ERROR      SWIFT_NAME(provConfigurationError) = 32,
    PROV_WIFI_STATUS_ERROR      SWIFT_NAME(provWifiStatusError) = 33,
    PROV_WIFI_STATUS_DISCONNECTED      SWIFT_NAME(provWifiStatusDisconnected) = 34,
    PROV_WIFI_STATUS_AUTH_ERROR      SWIFT_NAME(provWifiStatusAuthError) = 35,
    PROV_WIFI_STATUS_NETWORK_NOT_FOUND      SWIFT_NAME(provWifiStatusNetworkNotFound) = 36,
    PROV_WIFI_STATUS_UNKNOWN_ERROR      SWIFT_NAME(provWifiStatusUnknownError) = 37,
    PROV_TIMED_OUT_ERROR      SWIFT_NAME(provTimedOutError) = 45,
    PROV_UNKNOWN_ERROR      SWIFT_NAME(provUnknownError) = 38,
    RUNTIME_BAD_CLOSURE_ARGS      SWIFT_NAME(runtimeBadClosureArgs) = 41,
    RUNTIME_DOES_NOT_EXIST_LOCALLY      SWIFT_NAME(runtimeDoesNotExistLocally) = 42,
    RUNTIME_BAD_BASE64_DATA      SWIFT_NAME(runtimeBadBase64Data) = 43,
    RUNTIME_UNKNOWN_ERROR      SWIFT_NAME(runtimeUnknownError) = 44,
    ESP_NATIVE_UNKNOWN_ERROR      SWIFT_NAME(espNativeUnknownError) = 4,
    ESP_INSUFFICIENT_PERMISSIONS      SWIFT_NAME(espInsufficientPermissions) = 47,
    BLE_ADAPTER_NOT_AVAILABLE      SWIFT_NAME(bleAdapterNotAvailable) = 48,
  } CLOSED_ENUM;

} // namespace margelo::nitro::espprovtoolkit

namespace margelo::nitro {

  // C++ PTError <> JS PTError (enum)
  template <>
  struct JSIConverter<margelo::nitro::espprovtoolkit::PTError> final {
    static inline margelo::nitro::espprovtoolkit::PTError fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
      int enumValue = JSIConverter<int>::fromJSI(runtime, arg);
      return static_cast<margelo::nitro::espprovtoolkit::PTError>(enumValue);
    }
    static inline jsi::Value toJSI(jsi::Runtime& runtime, margelo::nitro::espprovtoolkit::PTError arg) {
      int enumValue = static_cast<int>(arg);
      return JSIConverter<int>::toJSI(runtime, enumValue);
    }
    static inline bool canConvert(jsi::Runtime&, const jsi::Value& value) {
      if (!value.isNumber()) {
        return false;
      }
      double number = value.getNumber();
      int integer = static_cast<int>(number);
      if (number != integer) {
        // The integer is not the same value as the double - we truncated floating points.
        // Enums are all integers, so the input floating point number is obviously invalid.
        return false;
      }
      switch (integer) {
        case 1 /* WIFI_SCAN_EMPTY_CONFIG_DATA */: return true;
        case 2 /* WIFI_SCAN_EMPTY_RESULT_COUNT */: return true;
        case 3 /* WIFI_SCAN_REQUEST_ERROR */: return true;
        case 11 /* SESSION_INIT_ERROR */: return true;
        case 12 /* SESSION_NOT_ESTABLISHED */: return true;
        case 13 /* SESSION_SEND_DATA_ERROR */: return true;
        case 14 /* SOFTAP_CONNECTION_FAILURE */: return true;
        case 15 /* SESSION_SECURITY_MISMATCH */: return true;
        case 16 /* SESSION_VERSION_INFO_ERROR */: return true;
        case 17 /* BLE_FAILED_TO_CONNECT */: return true;
        case 18 /* ENCRYPTION_ERROR */: return true;
        case 19 /* NO_POP */: return true;
        case 20 /* NO_USERNAME */: return true;
        case 21 /* CAMERA_NOT_AVAILABLE */: return true;
        case 22 /* CAMERA_ACCESS_DENIED */: return true;
        case 23 /* AV_CAPTURE_DEVICE_INPUT_ERROR */: return true;
        case 24 /* VIDEO_INPUT_ERROR */: return true;
        case 25 /* VIDEO_OUTPUT_ERROR */: return true;
        case 26 /* INVALID_QR_CODE */: return true;
        case 46 /* BLE_SEARCH_ERROR */: return true;
        case 27 /* ESP_DEVICE_NOT_FOUND */: return true;
        case 28 /* AP_SEARCH_NOT_SUPPORTED */: return true;
        case 31 /* PROV_SESSION_ERROR */: return true;
        case 32 /* PROV_CONFIGURATION_ERROR */: return true;
        case 33 /* PROV_WIFI_STATUS_ERROR */: return true;
        case 34 /* PROV_WIFI_STATUS_DISCONNECTED */: return true;
        case 35 /* PROV_WIFI_STATUS_AUTH_ERROR */: return true;
        case 36 /* PROV_WIFI_STATUS_NETWORK_NOT_FOUND */: return true;
        case 37 /* PROV_WIFI_STATUS_UNKNOWN_ERROR */: return true;
        case 45 /* PROV_TIMED_OUT_ERROR */: return true;
        case 38 /* PROV_UNKNOWN_ERROR */: return true;
        case 41 /* RUNTIME_BAD_CLOSURE_ARGS */: return true;
        case 42 /* RUNTIME_DOES_NOT_EXIST_LOCALLY */: return true;
        case 43 /* RUNTIME_BAD_BASE64_DATA */: return true;
        case 44 /* RUNTIME_UNKNOWN_ERROR */: return true;
        case 4 /* ESP_NATIVE_UNKNOWN_ERROR */: return true;
        case 47 /* ESP_INSUFFICIENT_PERMISSIONS */: return true;
        case 48 /* BLE_ADAPTER_NOT_AVAILABLE */: return true;
        default: return false;
      }
    }
  };

} // namespace margelo::nitro
