#ifndef SBK_KCOUNTRYFLAGEMOJIICONENGINEWRAPPER_H
#define SBK_KCOUNTRYFLAGEMOJIICONENGINEWRAPPER_H

// Workaround to access protected functions
#ifndef protected
#  define protected public
#endif

#include <kcountryflagemojiiconengine.h>

#include <sbkpython.h>

#include <array>
namespace Shiboken { struct AutoDecRef; class GilState; }

class KCountryFlagEmojiIconEngineWrapper : public KCountryFlagEmojiIconEngine
{
public:
    KCountryFlagEmojiIconEngineWrapper(const ::QString & regionOrCountry);
    KCountryFlagEmojiIconEngineWrapper(const KCountryFlagEmojiIconEngineWrapper &) = delete;
    KCountryFlagEmojiIconEngineWrapper& operator=(const KCountryFlagEmojiIconEngineWrapper &) = delete;
    KCountryFlagEmojiIconEngineWrapper(KCountryFlagEmojiIconEngineWrapper &&) = delete;
    KCountryFlagEmojiIconEngineWrapper& operator=(KCountryFlagEmojiIconEngineWrapper &&) = delete;
    ~KCountryFlagEmojiIconEngineWrapper() override;

    ::QSize actualSize(const ::QSize & size, ::QIcon::Mode mode, ::QIcon::State state) override;
    static ::QSize sbk_o_actualSize([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] const ::QSize & size, [[maybe_unused]] ::QIcon::Mode mode, [[maybe_unused]] ::QIcon::State state);
    void addFile(const ::QString & fileName, const ::QSize & size, ::QIcon::Mode mode, ::QIcon::State state) override;
    static void sbk_o_addFile([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] const ::QString & fileName, [[maybe_unused]] const ::QSize & size, [[maybe_unused]] ::QIcon::Mode mode, [[maybe_unused]] ::QIcon::State state);
    void addPixmap(const ::QPixmap & pixmap, ::QIcon::Mode mode, ::QIcon::State state) override;
    static void sbk_o_addPixmap([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] const ::QPixmap & pixmap, [[maybe_unused]] ::QIcon::Mode mode, [[maybe_unused]] ::QIcon::State state);
    ::QList<QSize> availableSizes(::QIcon::Mode mode = QIcon::Normal, ::QIcon::State state = QIcon::Off) override;
    static ::QList<QSize> sbk_o_availableSizes([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] ::QIcon::Mode mode = QIcon::Normal, [[maybe_unused]] ::QIcon::State state = QIcon::Off);
    ::QIconEngine * clone() const override;
    static ::QIconEngine * sbk_o_clone([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride);
    ::QString iconName() override;
    static ::QString sbk_o_iconName([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride);
    bool isNull() override;
    static bool sbk_o_isNull([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride);
    ::QString key() const override;
    void paint(::QPainter * painter, const ::QRect & rect, ::QIcon::Mode mode, ::QIcon::State state) override;
    static void sbk_o_paint([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] ::QPainter * painter, [[maybe_unused]] const ::QRect & rect, [[maybe_unused]] ::QIcon::Mode mode, [[maybe_unused]] ::QIcon::State state);
    ::QPixmap pixmap(const ::QSize & size, ::QIcon::Mode mode, ::QIcon::State state) override;
    static ::QPixmap sbk_o_pixmap([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] const ::QSize & size, [[maybe_unused]] ::QIcon::Mode mode, [[maybe_unused]] ::QIcon::State state);
    bool read(::QDataStream & in) override;
    static bool sbk_o_read([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] ::QDataStream & in);
    ::QPixmap scaledPixmap(const ::QSize & size, ::QIcon::Mode mode, ::QIcon::State state, qreal scale) override;
    static ::QPixmap sbk_o_scaledPixmap([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] const ::QSize & size, [[maybe_unused]] ::QIcon::Mode mode, [[maybe_unused]] ::QIcon::State state, [[maybe_unused]] qreal scale);
    bool write(::QDataStream & out) const override;
    static bool sbk_o_write([[maybe_unused]] const char *ownerClassName, [[maybe_unused]] const char *funcName, [[maybe_unused]] Shiboken::GilState &gil, [[maybe_unused]] const Shiboken::AutoDecRef &pyOverride, [[maybe_unused]] ::QDataStream & out);
    static void pysideInitQtMetaTypes();

    void resetPyMethodCache();

private:
    mutable std::array<PyObject *, 13> m_PyMethodCache = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
};

#endif // SBK_KCOUNTRYFLAGEMOJIICONENGINEWRAPPER_H
