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

#pragma once

#include "HybridNitroAccessibilityModuleSpec.hpp"

// Forward declaration of `HybridNitroAccessibilityModuleSpecCxx` to properly resolve imports.
namespace NitroStyleSheet { class HybridNitroAccessibilityModuleSpecCxx; }

// Forward declaration of `AccessibilitySettings` to properly resolve imports.
namespace margelo::nitro::stylesheet { struct AccessibilitySettings; }

#include "AccessibilitySettings.hpp"
#include <optional>
#include <functional>

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

#include "NitroStyleSheet-Swift-Cxx-Umbrella.hpp"

namespace margelo::nitro::stylesheet {

  /**
   * The C++ part of HybridNitroAccessibilityModuleSpecCxx.swift.
   *
   * HybridNitroAccessibilityModuleSpecSwift (C++) accesses HybridNitroAccessibilityModuleSpecCxx (Swift), and might
   * contain some additional bridging code for C++ <> Swift interop.
   *
   * Since this obviously introduces an overhead, I hope at some point in
   * the future, HybridNitroAccessibilityModuleSpecCxx can directly inherit from the C++ class HybridNitroAccessibilityModuleSpec
   * to simplify the whole structure and memory management.
   */
  class HybridNitroAccessibilityModuleSpecSwift: public virtual HybridNitroAccessibilityModuleSpec {
  public:
    // Constructor from a Swift instance
    explicit HybridNitroAccessibilityModuleSpecSwift(const NitroStyleSheet::HybridNitroAccessibilityModuleSpecCxx& swiftPart):
      HybridObject(HybridNitroAccessibilityModuleSpec::TAG),
      _swiftPart(swiftPart) { }

  public:
    // Get the Swift part
    inline NitroStyleSheet::HybridNitroAccessibilityModuleSpecCxx getSwiftPart() noexcept { return _swiftPart; }

  public:
    // Get memory pressure
    inline size_t getExternalMemorySize() noexcept override {
      return _swiftPart.getMemorySize();
    }

  public:
    // Properties
    

  public:
    // Methods
    inline void removeListeners() override {
      _swiftPart.removeListeners();
    }
    inline AccessibilitySettings getAllSettings() override {
      auto __result = _swiftPart.getAllSettings();
      return __result;
    }
    inline std::optional<bool> getIsReduceMotionEnabled() override {
      auto __result = _swiftPart.getIsReduceMotionEnabled();
      return __result;
    }
    inline void addReduceMotionListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addReduceMotionListener(onChanged);
    }
    inline std::optional<bool> getIsReduceTransparencyEnabled() override {
      auto __result = _swiftPart.getIsReduceTransparencyEnabled();
      return __result;
    }
    inline void addReduceTransparencyListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addReduceTransparencyListener(onChanged);
    }
    inline std::optional<bool> getIsDifferentiateWithoutColorEnabled() override {
      auto __result = _swiftPart.getIsDifferentiateWithoutColorEnabled();
      return __result;
    }
    inline void addDifferentiateWithoutColorListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addDifferentiateWithoutColorListener(onChanged);
    }
    inline std::optional<bool> getIsInvertColorsEnabled() override {
      auto __result = _swiftPart.getIsInvertColorsEnabled();
      return __result;
    }
    inline void addInvertColorsListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addInvertColorsListener(onChanged);
    }
    inline std::optional<bool> getIsShowButtonShapesEnabled() override {
      auto __result = _swiftPart.getIsShowButtonShapesEnabled();
      return __result;
    }
    inline void addShowButtonShapesListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addShowButtonShapesListener(onChanged);
    }
    inline std::optional<bool> getIsBoldTextEnabled() override {
      auto __result = _swiftPart.getIsBoldTextEnabled();
      return __result;
    }
    inline void addBoldTextListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addBoldTextListener(onChanged);
    }
    inline std::optional<bool> getIsVoiceOverEnabled() override {
      auto __result = _swiftPart.getIsVoiceOverEnabled();
      return __result;
    }
    inline void addVoiceOverListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addVoiceOverListener(onChanged);
    }
    inline std::optional<bool> getIsSwitchControlEnabled() override {
      auto __result = _swiftPart.getIsSwitchControlEnabled();
      return __result;
    }
    inline void addSwitchControlListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addSwitchControlListener(onChanged);
    }
    inline std::optional<bool> getIsVideoAutoplayEnabled() override {
      auto __result = _swiftPart.getIsVideoAutoplayEnabled();
      return __result;
    }
    inline void addVideoAutoplayListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addVideoAutoplayListener(onChanged);
    }
    inline std::optional<bool> getIsClosedCaptioningEnabled() override {
      auto __result = _swiftPart.getIsClosedCaptioningEnabled();
      return __result;
    }
    inline void addClosedCaptioningListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addClosedCaptioningListener(onChanged);
    }
    inline std::optional<bool> getPrefersCrossFadeTransitionsEnabled() override {
      auto __result = _swiftPart.getPrefersCrossFadeTransitionsEnabled();
      return __result;
    }
    inline void addPrefersCrossFadeTransitionsListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addPrefersCrossFadeTransitionsListener(onChanged);
    }
    inline std::optional<bool> getIsGrayscaleEnabled() override {
      auto __result = _swiftPart.getIsGrayscaleEnabled();
      return __result;
    }
    inline void addGrayscaleListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addGrayscaleListener(onChanged);
    }
    inline std::optional<bool> getIsDarkerSystemColorsEnabled() override {
      auto __result = _swiftPart.getIsDarkerSystemColorsEnabled();
      return __result;
    }
    inline void addDarkerSystemColorsListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addDarkerSystemColorsListener(onChanged);
    }
    inline std::optional<bool> getIsMonoAudioEnabled() override {
      auto __result = _swiftPart.getIsMonoAudioEnabled();
      return __result;
    }
    inline void addMonoAudioListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addMonoAudioListener(onChanged);
    }
    inline std::optional<bool> getIsShakeToUndoEnabled() override {
      auto __result = _swiftPart.getIsShakeToUndoEnabled();
      return __result;
    }
    inline void addShakeToUndoListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addShakeToUndoListener(onChanged);
    }
    inline std::optional<bool> getIsSpeakScreenEnabled() override {
      auto __result = _swiftPart.getIsSpeakScreenEnabled();
      return __result;
    }
    inline void addSpeakScreenListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addSpeakScreenListener(onChanged);
    }
    inline std::optional<bool> getIsSpeakSelectionEnabled() override {
      auto __result = _swiftPart.getIsSpeakSelectionEnabled();
      return __result;
    }
    inline void addSpeakSelectionListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addSpeakSelectionListener(onChanged);
    }
    inline std::optional<bool> getIsOnOffSwitchLabelsEnabled() override {
      auto __result = _swiftPart.getIsOnOffSwitchLabelsEnabled();
      return __result;
    }
    inline void addOnOffSwitchLabelsListener(const std::function<void(std::optional<bool> /* isEnabled */)>& onChanged) override {
      _swiftPart.addOnOffSwitchLabelsListener(onChanged);
    }

  private:
    NitroStyleSheet::HybridNitroAccessibilityModuleSpecCxx _swiftPart;
  };

} // namespace margelo::nitro::stylesheet
