///
/// JAndroidHaptics.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 "AndroidHaptics.hpp"

namespace margelo::nitro::haptics {

  using namespace facebook;

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

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

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

} // namespace margelo::nitro::haptics
