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

#pragma once

#include <fbjni/fbjni.h>
#include "PTError.hpp"

namespace margelo::nitro::espprovtoolkit {

  using namespace facebook;

  /**
   * The C++ JNI bridge between the C++ enum "PTError" and the the Kotlin enum "PTError".
   */
  struct JPTError final: public jni::JavaClass<JPTError> {
  public:
    static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/espprovtoolkit/PTError;";

  public:
    /**
     * Convert this Java/Kotlin-based enum to the C++ enum PTError.
     */
    [[maybe_unused]]
    [[nodiscard]]
    PTError toCpp() const {
      static const auto clazz = javaClassStatic();
      static const auto fieldOrdinal = clazz->getField<int>("value");
      int ordinal = this->getFieldValue(fieldOrdinal);
      return static_cast<PTError>(ordinal);
    }

  public:
    /**
     * Create a Java/Kotlin-based enum with the given C++ enum's value.
     */
    [[maybe_unused]]
    static jni::alias_ref<JPTError> fromCpp(PTError value) {
      static const auto clazz = javaClassStatic();
      switch (value) {
        case PTError::WIFI_SCAN_EMPTY_CONFIG_DATA:
          static const auto fieldWIFI_SCAN_EMPTY_CONFIG_DATA = clazz->getStaticField<JPTError>("WIFI_SCAN_EMPTY_CONFIG_DATA");
          return clazz->getStaticFieldValue(fieldWIFI_SCAN_EMPTY_CONFIG_DATA);
        case PTError::WIFI_SCAN_EMPTY_RESULT_COUNT:
          static const auto fieldWIFI_SCAN_EMPTY_RESULT_COUNT = clazz->getStaticField<JPTError>("WIFI_SCAN_EMPTY_RESULT_COUNT");
          return clazz->getStaticFieldValue(fieldWIFI_SCAN_EMPTY_RESULT_COUNT);
        case PTError::WIFI_SCAN_REQUEST_ERROR:
          static const auto fieldWIFI_SCAN_REQUEST_ERROR = clazz->getStaticField<JPTError>("WIFI_SCAN_REQUEST_ERROR");
          return clazz->getStaticFieldValue(fieldWIFI_SCAN_REQUEST_ERROR);
        case PTError::SESSION_INIT_ERROR:
          static const auto fieldSESSION_INIT_ERROR = clazz->getStaticField<JPTError>("SESSION_INIT_ERROR");
          return clazz->getStaticFieldValue(fieldSESSION_INIT_ERROR);
        case PTError::SESSION_NOT_ESTABLISHED:
          static const auto fieldSESSION_NOT_ESTABLISHED = clazz->getStaticField<JPTError>("SESSION_NOT_ESTABLISHED");
          return clazz->getStaticFieldValue(fieldSESSION_NOT_ESTABLISHED);
        case PTError::SESSION_SEND_DATA_ERROR:
          static const auto fieldSESSION_SEND_DATA_ERROR = clazz->getStaticField<JPTError>("SESSION_SEND_DATA_ERROR");
          return clazz->getStaticFieldValue(fieldSESSION_SEND_DATA_ERROR);
        case PTError::SOFTAP_CONNECTION_FAILURE:
          static const auto fieldSOFTAP_CONNECTION_FAILURE = clazz->getStaticField<JPTError>("SOFTAP_CONNECTION_FAILURE");
          return clazz->getStaticFieldValue(fieldSOFTAP_CONNECTION_FAILURE);
        case PTError::SESSION_SECURITY_MISMATCH:
          static const auto fieldSESSION_SECURITY_MISMATCH = clazz->getStaticField<JPTError>("SESSION_SECURITY_MISMATCH");
          return clazz->getStaticFieldValue(fieldSESSION_SECURITY_MISMATCH);
        case PTError::SESSION_VERSION_INFO_ERROR:
          static const auto fieldSESSION_VERSION_INFO_ERROR = clazz->getStaticField<JPTError>("SESSION_VERSION_INFO_ERROR");
          return clazz->getStaticFieldValue(fieldSESSION_VERSION_INFO_ERROR);
        case PTError::BLE_FAILED_TO_CONNECT:
          static const auto fieldBLE_FAILED_TO_CONNECT = clazz->getStaticField<JPTError>("BLE_FAILED_TO_CONNECT");
          return clazz->getStaticFieldValue(fieldBLE_FAILED_TO_CONNECT);
        case PTError::ENCRYPTION_ERROR:
          static const auto fieldENCRYPTION_ERROR = clazz->getStaticField<JPTError>("ENCRYPTION_ERROR");
          return clazz->getStaticFieldValue(fieldENCRYPTION_ERROR);
        case PTError::NO_POP:
          static const auto fieldNO_POP = clazz->getStaticField<JPTError>("NO_POP");
          return clazz->getStaticFieldValue(fieldNO_POP);
        case PTError::NO_USERNAME:
          static const auto fieldNO_USERNAME = clazz->getStaticField<JPTError>("NO_USERNAME");
          return clazz->getStaticFieldValue(fieldNO_USERNAME);
        case PTError::CAMERA_NOT_AVAILABLE:
          static const auto fieldCAMERA_NOT_AVAILABLE = clazz->getStaticField<JPTError>("CAMERA_NOT_AVAILABLE");
          return clazz->getStaticFieldValue(fieldCAMERA_NOT_AVAILABLE);
        case PTError::CAMERA_ACCESS_DENIED:
          static const auto fieldCAMERA_ACCESS_DENIED = clazz->getStaticField<JPTError>("CAMERA_ACCESS_DENIED");
          return clazz->getStaticFieldValue(fieldCAMERA_ACCESS_DENIED);
        case PTError::AV_CAPTURE_DEVICE_INPUT_ERROR:
          static const auto fieldAV_CAPTURE_DEVICE_INPUT_ERROR = clazz->getStaticField<JPTError>("AV_CAPTURE_DEVICE_INPUT_ERROR");
          return clazz->getStaticFieldValue(fieldAV_CAPTURE_DEVICE_INPUT_ERROR);
        case PTError::VIDEO_INPUT_ERROR:
          static const auto fieldVIDEO_INPUT_ERROR = clazz->getStaticField<JPTError>("VIDEO_INPUT_ERROR");
          return clazz->getStaticFieldValue(fieldVIDEO_INPUT_ERROR);
        case PTError::VIDEO_OUTPUT_ERROR:
          static const auto fieldVIDEO_OUTPUT_ERROR = clazz->getStaticField<JPTError>("VIDEO_OUTPUT_ERROR");
          return clazz->getStaticFieldValue(fieldVIDEO_OUTPUT_ERROR);
        case PTError::INVALID_QR_CODE:
          static const auto fieldINVALID_QR_CODE = clazz->getStaticField<JPTError>("INVALID_QR_CODE");
          return clazz->getStaticFieldValue(fieldINVALID_QR_CODE);
        case PTError::BLE_SEARCH_ERROR:
          static const auto fieldBLE_SEARCH_ERROR = clazz->getStaticField<JPTError>("BLE_SEARCH_ERROR");
          return clazz->getStaticFieldValue(fieldBLE_SEARCH_ERROR);
        case PTError::ESP_DEVICE_NOT_FOUND:
          static const auto fieldESP_DEVICE_NOT_FOUND = clazz->getStaticField<JPTError>("ESP_DEVICE_NOT_FOUND");
          return clazz->getStaticFieldValue(fieldESP_DEVICE_NOT_FOUND);
        case PTError::AP_SEARCH_NOT_SUPPORTED:
          static const auto fieldAP_SEARCH_NOT_SUPPORTED = clazz->getStaticField<JPTError>("AP_SEARCH_NOT_SUPPORTED");
          return clazz->getStaticFieldValue(fieldAP_SEARCH_NOT_SUPPORTED);
        case PTError::PROV_SESSION_ERROR:
          static const auto fieldPROV_SESSION_ERROR = clazz->getStaticField<JPTError>("PROV_SESSION_ERROR");
          return clazz->getStaticFieldValue(fieldPROV_SESSION_ERROR);
        case PTError::PROV_CONFIGURATION_ERROR:
          static const auto fieldPROV_CONFIGURATION_ERROR = clazz->getStaticField<JPTError>("PROV_CONFIGURATION_ERROR");
          return clazz->getStaticFieldValue(fieldPROV_CONFIGURATION_ERROR);
        case PTError::PROV_WIFI_STATUS_ERROR:
          static const auto fieldPROV_WIFI_STATUS_ERROR = clazz->getStaticField<JPTError>("PROV_WIFI_STATUS_ERROR");
          return clazz->getStaticFieldValue(fieldPROV_WIFI_STATUS_ERROR);
        case PTError::PROV_WIFI_STATUS_DISCONNECTED:
          static const auto fieldPROV_WIFI_STATUS_DISCONNECTED = clazz->getStaticField<JPTError>("PROV_WIFI_STATUS_DISCONNECTED");
          return clazz->getStaticFieldValue(fieldPROV_WIFI_STATUS_DISCONNECTED);
        case PTError::PROV_WIFI_STATUS_AUTH_ERROR:
          static const auto fieldPROV_WIFI_STATUS_AUTH_ERROR = clazz->getStaticField<JPTError>("PROV_WIFI_STATUS_AUTH_ERROR");
          return clazz->getStaticFieldValue(fieldPROV_WIFI_STATUS_AUTH_ERROR);
        case PTError::PROV_WIFI_STATUS_NETWORK_NOT_FOUND:
          static const auto fieldPROV_WIFI_STATUS_NETWORK_NOT_FOUND = clazz->getStaticField<JPTError>("PROV_WIFI_STATUS_NETWORK_NOT_FOUND");
          return clazz->getStaticFieldValue(fieldPROV_WIFI_STATUS_NETWORK_NOT_FOUND);
        case PTError::PROV_WIFI_STATUS_UNKNOWN_ERROR:
          static const auto fieldPROV_WIFI_STATUS_UNKNOWN_ERROR = clazz->getStaticField<JPTError>("PROV_WIFI_STATUS_UNKNOWN_ERROR");
          return clazz->getStaticFieldValue(fieldPROV_WIFI_STATUS_UNKNOWN_ERROR);
        case PTError::PROV_TIMED_OUT_ERROR:
          static const auto fieldPROV_TIMED_OUT_ERROR = clazz->getStaticField<JPTError>("PROV_TIMED_OUT_ERROR");
          return clazz->getStaticFieldValue(fieldPROV_TIMED_OUT_ERROR);
        case PTError::PROV_UNKNOWN_ERROR:
          static const auto fieldPROV_UNKNOWN_ERROR = clazz->getStaticField<JPTError>("PROV_UNKNOWN_ERROR");
          return clazz->getStaticFieldValue(fieldPROV_UNKNOWN_ERROR);
        case PTError::RUNTIME_BAD_CLOSURE_ARGS:
          static const auto fieldRUNTIME_BAD_CLOSURE_ARGS = clazz->getStaticField<JPTError>("RUNTIME_BAD_CLOSURE_ARGS");
          return clazz->getStaticFieldValue(fieldRUNTIME_BAD_CLOSURE_ARGS);
        case PTError::RUNTIME_DOES_NOT_EXIST_LOCALLY:
          static const auto fieldRUNTIME_DOES_NOT_EXIST_LOCALLY = clazz->getStaticField<JPTError>("RUNTIME_DOES_NOT_EXIST_LOCALLY");
          return clazz->getStaticFieldValue(fieldRUNTIME_DOES_NOT_EXIST_LOCALLY);
        case PTError::RUNTIME_BAD_BASE64_DATA:
          static const auto fieldRUNTIME_BAD_BASE64_DATA = clazz->getStaticField<JPTError>("RUNTIME_BAD_BASE64_DATA");
          return clazz->getStaticFieldValue(fieldRUNTIME_BAD_BASE64_DATA);
        case PTError::RUNTIME_UNKNOWN_ERROR:
          static const auto fieldRUNTIME_UNKNOWN_ERROR = clazz->getStaticField<JPTError>("RUNTIME_UNKNOWN_ERROR");
          return clazz->getStaticFieldValue(fieldRUNTIME_UNKNOWN_ERROR);
        case PTError::ESP_NATIVE_UNKNOWN_ERROR:
          static const auto fieldESP_NATIVE_UNKNOWN_ERROR = clazz->getStaticField<JPTError>("ESP_NATIVE_UNKNOWN_ERROR");
          return clazz->getStaticFieldValue(fieldESP_NATIVE_UNKNOWN_ERROR);
        case PTError::ESP_INSUFFICIENT_PERMISSIONS:
          static const auto fieldESP_INSUFFICIENT_PERMISSIONS = clazz->getStaticField<JPTError>("ESP_INSUFFICIENT_PERMISSIONS");
          return clazz->getStaticFieldValue(fieldESP_INSUFFICIENT_PERMISSIONS);
        case PTError::BLE_ADAPTER_NOT_AVAILABLE:
          static const auto fieldBLE_ADAPTER_NOT_AVAILABLE = clazz->getStaticField<JPTError>("BLE_ADAPTER_NOT_AVAILABLE");
          return clazz->getStaticFieldValue(fieldBLE_ADAPTER_NOT_AVAILABLE);
        default:
          std::string stringValue = std::to_string(static_cast<int>(value));
          throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
      }
    }
  };

} // namespace margelo::nitro::espprovtoolkit
