#include <stdint.h>
#include <fcitx/fcitx.h>
#include <fcitx-utils/utils.h>
#include <fcitx/instance.h>
#include <fcitx/addon.h>
#include <fcitx/module.h>


#ifndef __FCITX_MODULE_FCITX_CLASSIC_UI_ADD_FUNCTION_H
#define __FCITX_MODULE_FCITX_CLASSIC_UI_ADD_FUNCTION_H

#ifdef __cplusplus
extern "C" {
#endif

DEFINE_GET_ADDON("fcitx-classic-ui", _ClassicUI_)

static void*
__fcitx_ClassicUI_function_LoadImage(void *_self, FcitxModuleFunctionArg _args)
{
    FCITX_DEF_CAST_FROM_PTR(FcitxClassicUI*, __self, _self);
    FCITX_DEF_CAST_FROM_PTR(const char*, arg0, _args.args[0]);
    FCITX_DEF_CAST_FROM_PTR(boolean*, _arg1, _args.args[1]);
    FcitxSkin* self = (&(__self)->skin);
    FCITX_UNUSED(self);
    boolean arg1 = (*(_arg1));
    SkinImage* res = (LoadImage(self, arg0, arg1));
    cairo_surface_t* _res = ((res) ? (res)->image : NULL);
    FCITX_RETURN_AS_PTR(cairo_surface_t*, _res);
}

static void*
__fcitx_ClassicUI_function_GetKeyboardFontColor(void *_self, FcitxModuleFunctionArg _args)
{
    FCITX_DEF_CAST_FROM_PTR(FcitxClassicUI*, __self, _self);
    FCITX_UNUSED(_args);
    FcitxClassicUI* self = __self;
    FCITX_UNUSED(self);
    FcitxConfigColor* res = (&(self)->skin.skinKeyboard.keyColor);
    FCITX_RETURN_AS_PTR(FcitxConfigColor*, res);
}

static void*
__fcitx_ClassicUI_function_GetFont(void *_self, FcitxModuleFunctionArg _args)
{
    FCITX_DEF_CAST_FROM_PTR(FcitxClassicUI*, __self, _self);
    FCITX_UNUSED(_args);
    FcitxClassicUI* self = __self;
    FCITX_UNUSED(self);
    char** res = (&(self)->font);
    FCITX_RETURN_AS_PTR(char**, res);
}

static void
FcitxClassicUIAddFunctions(FcitxInstance *instance)
{
    int i;
    FcitxAddon *addon = Fcitx_ClassicUI_GetAddon(instance);
    static const FcitxModuleFunction ____fcitx_ClassicUI_addon_functions_table[] = {
        __fcitx_ClassicUI_function_LoadImage,
        __fcitx_ClassicUI_function_GetKeyboardFontColor,
        __fcitx_ClassicUI_function_GetFont,
    };
    for (i = 0;i < 3;i++) {
        FcitxModuleAddFunction(addon, ____fcitx_ClassicUI_addon_functions_table[i]);
    }
}

#ifdef __cplusplus
}
#endif

#endif
