/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
//
// Created by Darin on 12/02/2018.
//

#ifndef WEEXV8_WEEXAPIHEADER_H
#define WEEXV8_WEEXAPIHEADER_H

#include <vector>
#include <set>
#include <map>
#include "WeexApiValue.h"

#ifdef OS_ANDROID
#include <jni.h>
#include "third_party/IPC/IPCResult.h"
#endif

namespace WeexCore {
    class WXCoreMargin;
    class WXCorePadding;
    class WXCoreBorderWidth;
    class WXCoreSize;
}  // namespace WeexCore
using namespace WeexCore;

class WeexJSResult{
public:
    std::unique_ptr<char[]> data;
    int length = 0;
    WeexJSResult() : data(nullptr), length(0) {}
    WeexJSResult(std::unique_ptr<char[]> d, int l) : data(std::move(d)), length(l) {}
};

typedef struct InitFrameworkParams {
    WeexByteArray *type;
    WeexByteArray *value;
} INIT_FRAMEWORK_PARAMS;

#ifdef OS_ANDROID

typedef void (*FuncSetJSVersion)(const char *jsVersion);

typedef void (*FuncReportException)(const char *pageId, const char *func, const char *exception_string);
typedef void (*FuncReportServerCrash)(const char *instance_id);
typedef void (*FuncReportNativeInitStatus)(const char *status_code, const char *error_msg);

typedef void (*FuncCallNative)(const char *pageId, const char *task, const char *callback);

typedef std::unique_ptr<ValueWithType> (*FuncCallNativeModule)(const char *pageId, const char *module, const char *method,
                                                           const char *arguments, int argumentsLen, const char *options, int optionsLen);

typedef void (*FuncCallNativeComponent)(const char *pageId, const char *ref,
                                        const char *method, const char *arguments, int argumentsLen, const char *options, int optionsLen);

typedef void (*FuncCallAddElement)(const char *pageId, const char *parentRef, const char *domStr, int domLen,
                                   const char *index_cstr);

typedef void (*FuncSetTimeout)(const char *callbackId, const char *time);

typedef void (*FuncCallNativeLog)(const char *str_array);

typedef void (*FuncCallCreateBody)(const char *pageId, const char *domStr, int domStrLen);

typedef int (*FuncCallUpdateFinish)(const char *pageId, const char *task,int taskLen, const char *callback, int callbackLen);

typedef void (*FuncCallCreateFinish)(const char *pageId);

typedef int (*FuncCallRefreshFinish)(const char *pageId, const char *task, const char *callback);

typedef void (*FuncCallUpdateAttrs)(const char *pageId, const char *ref, const char *data, int dataLen);

typedef void (*FuncCallUpdateStyle)(const char *pageId, const char *ref, const char *data, int dataLen);

typedef void (*FuncCallRemoveElement)(const char *pageId, const char *ref);

typedef void (*FuncCallMoveElement)(const char *pageId, const char *ref, const char *parentRef, int index);

typedef void (*FuncCallAddEvent)(const char *pageId, const char *ref, const char *event);

typedef void (*FuncCallRemoveEvent)(const char *pageId, const char *ref, const char *event);

typedef int (*FuncSetInterval)(const char *pageId, const char *callbackId, const char *_time);

typedef void (*FuncClearInterval)(const char *pageId, const char *callbackId);

typedef const char *(*FuncCallGCanvasLinkNative)(const char *pageId, int type, const char *args);

typedef const char *(*FuncT3dLinkNative)(int type, const char *args);

typedef void (*FuncCallHandlePostMessage)(const char *vimId, const char *data, int dataLength);

typedef void
(*FuncCallDIspatchMessage)(const char *clientId, const char *data, int dataLength, const char *callback, const char *vmId);

typedef std::unique_ptr<WeexJSResult> (*FuncCallDispatchMessageSync)(
    const char *clientId, const char *data, int dataLength, const char *vmId);

typedef void
(*FuncOnReceivedResult)(long callback_id, std::unique_ptr<WeexJSResult>& result);
typedef void
(*FuncUpdateComponentData)(const char* page_id, const char* cid, const char* json_data);


typedef struct FunctionsExposedByCore {
    FuncSetJSVersion funcSetJSVersion;
    FuncReportException funcReportException;
    FuncCallNative funcCallNative;
    FuncCallNativeModule funcCallNativeModule;
    FuncCallNativeComponent funcCallNativeComponent;
    FuncCallAddElement funcCallAddElement;
    FuncSetTimeout funcSetTimeout;
    FuncCallNativeLog funcCallNativeLog;
    FuncCallCreateBody funcCallCreateBody;
    FuncCallUpdateFinish funcCallUpdateFinish;
    FuncCallCreateFinish funcCallCreateFinish;
    FuncCallRefreshFinish funcCallRefreshFinish;
    FuncCallUpdateAttrs funcCallUpdateAttrs;
    FuncCallUpdateStyle funcCallUpdateStyle;
    FuncCallRemoveElement funcCallRemoveElement;
    FuncCallMoveElement funcCallMoveElement;
    FuncCallAddEvent funcCallAddEvent;
    FuncCallRemoveEvent funcCallRemoveEvent;
    FuncSetInterval funcSetInterval;
    FuncClearInterval funcClearInterval;
    FuncCallGCanvasLinkNative funcCallGCanvasLinkNative;
    FuncT3dLinkNative funcT3dLinkNative;
    FuncCallHandlePostMessage funcCallHandlePostMessage;
    FuncCallDIspatchMessage funcCallDIspatchMessage;
    FuncCallDispatchMessageSync funcCallDispatchMessageSync;
    FuncOnReceivedResult  funcOnReceivedResult;
    FuncUpdateComponentData funcUpdateComponentData;
} FunctionsExposedByCore;

typedef void (*FuncCallSetJSVersion)(const char* version);
typedef int (*CallNative)(const char *pageId, const char *task, const char *callback);
typedef int (*FuncCreateBody)(const char* page_id, const char *component_type, const char* ref,
                              std::map<std::string, std::string> *styles,
                              std::map<std::string, std::string> *attributes,
                              std::set<std::string> *events,
                              const WXCoreMargin &margins,
                              const WXCorePadding &paddings,
                              const WXCoreBorderWidth &borders);
typedef int (*FuncCreateFinish)(const char *pageId);
typedef int (*FuncAddElement)(const char* page_id, const char *component_type, const char* ref,
                              int &index, const char* parentRef,
                              std::map<std::string, std::string> *styles,
                              std::map<std::string, std::string> *attributes,
                              std::set<std::string> *events,
                              const WXCoreMargin &margins,
                              const WXCorePadding &paddings,
                              const WXCoreBorderWidth &borders,
                              bool willLayout);
typedef int (*FuncRemoveElement)(const char *pageId, const char *ref);
typedef int (*FuncMoveElement)(const char *pageId, const char *ref, const char *parentRef, int index);
typedef int (*FuncAddEvent)(const char *pageId, const char *ref, const char *event);
typedef int (*FuncRemoveEvent)(const char *pageId, const char *ref, const char *event);
typedef int (*FuncUpdateStyle)(const char* page_id, const char* ref,
                               std::vector<std::pair<std::string, std::string>> *style,
                               std::vector<std::pair<std::string, std::string>> *margin,
                               std::vector<std::pair<std::string, std::string>> *padding,
                               std::vector<std::pair<std::string, std::string>> *border);
typedef int (*FuncUpdateAttr)(const char* page_id, const char* ref,
                              std::vector<std::pair<std::string, std::string>> *attrs);
typedef int (*FuncLayout)(const char *page_id, const char *ref,
                          int top, int bottom, int left, int right,
                          int height, int width, int index);
typedef int (*FuncAppendTreeCreateFinish)(const char* page_id, const char* ref);
typedef int (*FuncHasTransitionPros)(const char* page_id, const char* ref,
                                     std::vector<std::pair<std::string, std::string>> *style);
typedef WXCoreSize (*InvokeMeasureFunction)(const char* page_id, long render_ptr, float width, int width_measure_mode, float height, int height_measure_mode);
typedef void (*InvokeLayoutBefore)(const char* page_id, long render_ptr);
typedef void (*InvokeLayoutAfter)(const char* page_id, long render_ptr, float width, float height);
typedef struct PlatformExposeFunctions {
    FuncCallSetJSVersion set_js_version;
    FuncReportException report_exception;
    FuncReportServerCrash report_server_crash;
    FuncReportNativeInitStatus report_native_Init_status;
    CallNative call_native;
    FuncCallNativeModule call_native_module;
    FuncCallNativeComponent call_native_component;
    FuncAddElement add_element;
    FuncSetTimeout set_timeout;
    FuncCallNativeLog native_log;
    FuncCreateBody create_body;
    FuncCallUpdateFinish update_finish;
    FuncCreateFinish create_finish;
    FuncCreateFinish render_success;
    FuncCallRefreshFinish refresh_finish;
    FuncUpdateAttr update_attrs;
    FuncUpdateStyle update_style;
    FuncRemoveElement remove_element;
    FuncMoveElement move_element;
    FuncAddEvent add_event;
    FuncRemoveEvent remove_event;
    FuncCallHandlePostMessage post_message;
    FuncCallDIspatchMessage dispatch_message;
    FuncLayout layout;
    FuncAppendTreeCreateFinish append_tree_create_finish;
    FuncHasTransitionPros has_transition_pros;
    InvokeMeasureFunction invoke_measure_function;
    InvokeLayoutBefore invoke_layout_before;
    InvokeLayoutAfter invoke_layout_after;
} PlatformExposeFunctions;


typedef int (*FuncInitFramework)(const char *script, std::vector<INIT_FRAMEWORK_PARAMS *> &params);


typedef int (*FuncInitAppFramework)(const char *instanceId, const char *appFramework,
                                    std::vector<INIT_FRAMEWORK_PARAMS *> &params);

typedef int (*FuncCreateAppContext)(const char *instanceId, const char *jsBundle);

typedef std::unique_ptr<WeexJSResult> (*FuncExeJSOnAppWithResult)(const char *instanceId, const char *jsBundle);

typedef int (*FuncCallJSOnAppContext)(const char *instanceId, const char *func, std::vector<VALUE_WITH_TYPE *> &params);

typedef int (*FuncDestroyAppContext)(const char *instanceId);

typedef int (*FuncExeJsService)(const char *source);

typedef int (*FuncExeCTimeCallback)(const char *source);

typedef int (*FuncExeJS)(const char *instanceId, const char *nameSpace, const char *func,
                         std::vector<VALUE_WITH_TYPE *> &params);

typedef std::unique_ptr<WeexJSResult>(*FuncExeJSWithResult)(const char *instanceId, const char *nameSpace, const char *func,
                                           std::vector<VALUE_WITH_TYPE *> &params);

typedef void(*FuncExeJSWithResultId)(const char *instanceId, const char *nameSpace, const char *func,
                                           std::vector<VALUE_WITH_TYPE *> &params, long callback_id);

typedef int (*FuncCreateInstance)(const char *instanceId, const char *func, const char *script, const char *opts,
                                  const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params);

typedef std::unique_ptr<WeexJSResult> (*FuncExeJSOnInstance)(const char *instanceId, const char *script,int type);

typedef int (*FuncDestroyInstance)(const char *instanceId);

typedef int (*FuncUpdateGlobalConfig)(const char *config);

typedef int (*FuncUpdateInitFrameworkParams)(const std::string& key, const std::string& value, const std::string& desc);

typedef struct FunctionsExposedByJS {
    FuncInitFramework funcInitFramework;
    FuncInitAppFramework funcInitAppFramework;
    FuncCreateAppContext funcCreateAppContext;
    FuncExeJSOnAppWithResult funcExeJSOnAppWithResult;
    FuncCallJSOnAppContext funcCallJSOnAppContext;
    FuncDestroyAppContext funcDestroyAppContext;
    FuncExeJsService funcExeJsService;
    FuncExeCTimeCallback funcExeCTimeCallback;
    FuncExeJS funcExeJS;
    FuncExeJSWithResult funcExeJSWithResult;
    FuncExeJSWithResultId funcExeJSWithResultId;
    FuncCreateInstance funcCreateInstance;
    FuncExeJSOnInstance funcExeJSOnInstance;
    FuncDestroyInstance funcDestroyInstance;
    FuncUpdateGlobalConfig funcUpdateGlobalConfig;
    FuncUpdateInitFrameworkParams funcUpdateInitFrameworkParams;
} FunctionsExposedByJS;


typedef void (*SetDefaultHeightAndWidthIntoRootDomCallback)(const std::string &instance_id,
                                                    float default_width,
                                                    float default_height,
                                                    bool is_width_wrap_content,
                                                    bool is_height_wrap_content);
typedef void (*OnInstanceCloseCallback)(const std::string &instance_id);
typedef void (*SetStyleWidthCallback)(const std::string &instance_id, const std::string& render_ref, float width);
typedef void (*SetStyleHeightCallback)(const std::string &instance_id, const std::string& render_ref, float height);
typedef void (*SetMarginCallback)(const std::string &instance_id, const std::string& render_ref, int edge, float value);
typedef void (*SetPaddingCallback)(const std::string &instance_id, const std::string& render_ref, int edge, float value);
typedef void (*SetPositionCallback)(const std::string &instance_id, const std::string& render_ref, int edge, float value);
typedef void (*MarkDirtyCallback)(const std::string &instance_id, const std::string& render_ref);
typedef void (*SetViewPortWidthCallback)(const std::string &instance_id, float width);
typedef void (*ForceLayoutCallback)(const std::string &instance_id);
typedef bool (*NotifyLayoutCallback)(const std::string &instance_id);
typedef std::vector<int64_t> (*GetFirstScreenRenderTimeCallback)(const std::string &instance_id);
typedef std::vector<int64_t> (*GetRenderFinishTimeCallback)(const std::string &instance_id);
typedef void (*SetRenderContainerWrapContentCallback)(const std::string &instance_id, bool wrap);
typedef void (*BindMeasurementToRenderObjectCallback)(long ptr);
typedef void (*RegisterCoreEnvCallback)(const std::string& key, const std::string& value);

typedef long (*GetRenderObjectCallback)(const std::string &instance_id, const std::string& render_ref);
typedef void (*UpdateRenderObjectStyleCallback)(long render_ptr, const std::string& key, const std::string& value);
typedef void (*UpdateRenderObjectAttrCallback)(long render_ptr, const std::string& key, const std::string& value);
typedef long (*CopyRenderObjectCallback)(long render_ptr);
typedef void (*SetMeasureFunctionAdapter)();
typedef void (*SetPlatform)(const std::string& platformName);
typedef void (*SetDeviceWidthAndHeight)(float width, float height);
typedef void (*AddOption)(const std::string& key, const std::string& value);
typedef struct CoreSideFunctionsOfPlatformBridge {
    SetDefaultHeightAndWidthIntoRootDomCallback set_default_height_and_width_into_root_dom;
    OnInstanceCloseCallback on_instance_close;
    SetStyleWidthCallback set_style_width;
    SetStyleHeightCallback set_style_height;
    SetMarginCallback set_margin;
    SetPaddingCallback set_padding;
    SetPositionCallback set_position;
    MarkDirtyCallback mark_dirty;
    SetViewPortWidthCallback set_view_port_width;
    ForceLayoutCallback force_layout;
    NotifyLayoutCallback notify_layout;
    GetFirstScreenRenderTimeCallback get_first_screen_render_time;
    GetRenderFinishTimeCallback get_render_finish_time;
    SetRenderContainerWrapContentCallback set_render_container_wrap_content;
    BindMeasurementToRenderObjectCallback bind_measurement_to_render_object;
    RegisterCoreEnvCallback register_core_env;
    GetRenderObjectCallback get_render_object;
    UpdateRenderObjectStyleCallback update_render_object_style;
    UpdateRenderObjectAttrCallback update_render_object_attr;
    CopyRenderObjectCallback copy_render_object;
    SetMeasureFunctionAdapter set_measure_function_adapter;
    SetPlatform set_platform;
    SetDeviceWidthAndHeight set_device_width_and_height;
    AddOption add_option;

    FuncInitFramework init_framework;
    FuncInitAppFramework init_app_framework;
    FuncCreateAppContext create_app_context;
    FuncExeJSOnAppWithResult exec_js__on_app_with_result;
    FuncCallJSOnAppContext call_js_on_app_context;
    FuncDestroyAppContext destroy_app_context;
    FuncExeJsService exec_js_service;
    FuncExeCTimeCallback exec_time_callback;
    FuncExeJS exec_js;
    FuncExeJSWithResult exec_js_with_result;
    FuncCreateInstance create_instance;
    FuncExeJSOnInstance exec_js_on_instance;
    FuncDestroyInstance destroy_instance;
    FuncUpdateGlobalConfig update_global_config;
} CoreSideFunctionsOfPlatformBridge;
#endif

#endif //WEEXV8_WEEXAPIHEADER_H
