///
/// JAndroidHaptic.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 "AndroidHaptic.hpp"

namespace margelo::nitro::one {

  using namespace facebook;

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

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

  public:
    /**
     * Create a Java/Kotlin-based enum with the given C++ enum's value.
     */
    [[maybe_unused]]
    static jni::alias_ref<JAndroidHaptic> fromCpp(AndroidHaptic value) {
      static const auto clazz = javaClassStatic();
      switch (value) {
        case AndroidHaptic::CLOCK_TICK:
          static const auto fieldCLOCK_TICK = clazz->getStaticField<JAndroidHaptic>("CLOCK_TICK");
          return clazz->getStaticFieldValue(fieldCLOCK_TICK);
        case AndroidHaptic::CONFIRM:
          static const auto fieldCONFIRM = clazz->getStaticField<JAndroidHaptic>("CONFIRM");
          return clazz->getStaticFieldValue(fieldCONFIRM);
        case AndroidHaptic::CONTEXT_CLICK:
          static const auto fieldCONTEXT_CLICK = clazz->getStaticField<JAndroidHaptic>("CONTEXT_CLICK");
          return clazz->getStaticFieldValue(fieldCONTEXT_CLICK);
        case AndroidHaptic::DRAG_START:
          static const auto fieldDRAG_START = clazz->getStaticField<JAndroidHaptic>("DRAG_START");
          return clazz->getStaticFieldValue(fieldDRAG_START);
        case AndroidHaptic::GESTURE_END:
          static const auto fieldGESTURE_END = clazz->getStaticField<JAndroidHaptic>("GESTURE_END");
          return clazz->getStaticFieldValue(fieldGESTURE_END);
        case AndroidHaptic::GESTURE_START:
          static const auto fieldGESTURE_START = clazz->getStaticField<JAndroidHaptic>("GESTURE_START");
          return clazz->getStaticFieldValue(fieldGESTURE_START);
        case AndroidHaptic::KEYBOARD_PRESS:
          static const auto fieldKEYBOARD_PRESS = clazz->getStaticField<JAndroidHaptic>("KEYBOARD_PRESS");
          return clazz->getStaticFieldValue(fieldKEYBOARD_PRESS);
        case AndroidHaptic::KEYBOARD_RELEASE:
          static const auto fieldKEYBOARD_RELEASE = clazz->getStaticField<JAndroidHaptic>("KEYBOARD_RELEASE");
          return clazz->getStaticFieldValue(fieldKEYBOARD_RELEASE);
        case AndroidHaptic::KEYBOARD_TAP:
          static const auto fieldKEYBOARD_TAP = clazz->getStaticField<JAndroidHaptic>("KEYBOARD_TAP");
          return clazz->getStaticFieldValue(fieldKEYBOARD_TAP);
        case AndroidHaptic::LONG_PRESS:
          static const auto fieldLONG_PRESS = clazz->getStaticField<JAndroidHaptic>("LONG_PRESS");
          return clazz->getStaticFieldValue(fieldLONG_PRESS);
        case AndroidHaptic::NO_HAPTICS:
          static const auto fieldNO_HAPTICS = clazz->getStaticField<JAndroidHaptic>("NO_HAPTICS");
          return clazz->getStaticFieldValue(fieldNO_HAPTICS);
        case AndroidHaptic::REJECT:
          static const auto fieldREJECT = clazz->getStaticField<JAndroidHaptic>("REJECT");
          return clazz->getStaticFieldValue(fieldREJECT);
        case AndroidHaptic::SEGMENT_FREQUENT_TICK:
          static const auto fieldSEGMENT_FREQUENT_TICK = clazz->getStaticField<JAndroidHaptic>("SEGMENT_FREQUENT_TICK");
          return clazz->getStaticFieldValue(fieldSEGMENT_FREQUENT_TICK);
        case AndroidHaptic::SEGMENT_TICK:
          static const auto fieldSEGMENT_TICK = clazz->getStaticField<JAndroidHaptic>("SEGMENT_TICK");
          return clazz->getStaticFieldValue(fieldSEGMENT_TICK);
        case AndroidHaptic::TEXT_HANDLE_MOVE:
          static const auto fieldTEXT_HANDLE_MOVE = clazz->getStaticField<JAndroidHaptic>("TEXT_HANDLE_MOVE");
          return clazz->getStaticFieldValue(fieldTEXT_HANDLE_MOVE);
        case AndroidHaptic::TOGGLE_OFF:
          static const auto fieldTOGGLE_OFF = clazz->getStaticField<JAndroidHaptic>("TOGGLE_OFF");
          return clazz->getStaticFieldValue(fieldTOGGLE_OFF);
        case AndroidHaptic::TOGGLE_ON:
          static const auto fieldTOGGLE_ON = clazz->getStaticField<JAndroidHaptic>("TOGGLE_ON");
          return clazz->getStaticFieldValue(fieldTOGGLE_ON);
        case AndroidHaptic::VIRTUAL_KEY:
          static const auto fieldVIRTUAL_KEY = clazz->getStaticField<JAndroidHaptic>("VIRTUAL_KEY");
          return clazz->getStaticFieldValue(fieldVIRTUAL_KEY);
        case AndroidHaptic::VIRTUAL_KEY_RELEASE:
          static const auto fieldVIRTUAL_KEY_RELEASE = clazz->getStaticField<JAndroidHaptic>("VIRTUAL_KEY_RELEASE");
          return clazz->getStaticFieldValue(fieldVIRTUAL_KEY_RELEASE);
        default:
          std::string stringValue = std::to_string(static_cast<int>(value));
          throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
      }
    }
  };

} // namespace margelo::nitro::one
