/**
 *
 * Agora Real Time Engagement
 * Created by Wei Hu in 2021-09.
 * Copyright (c) 2022 Agora IO. All rights reserved.
 *
 */
#include <node_api.h>

#include "js_native_api.h"
#include "rte_runtime/binding/nodejs/src/addon/addon.h"
#include "rte_runtime/binding/nodejs/src/app/app.h"
#include "rte_runtime/binding/nodejs/src/common/clean.h"
#include "rte_runtime/binding/nodejs/src/common/logger.h"
#include "rte_runtime/binding/nodejs/src/extension/extension.h"
#include "rte_runtime/binding/nodejs/src/extension_group/extension_group.h"
#include "rte_runtime/binding/nodejs/src/metadata/metadata.h"
#include "rte_runtime/binding/nodejs/src/msg/cmd/cmd.h"
#include "rte_runtime/binding/nodejs/src/msg/image_frame/image_frame.h"
#include "rte_runtime/binding/nodejs/src/msg/pcm_frame/pcm_frame.h"
#include "rte_runtime/binding/nodejs/src/rte/rte.h"
#include "rte_runtime/binding/nodejs/src/value/value.h"

#define ZF_LOG_TAG "Node"
#include "zf_log.h"

napi_value Init(napi_env env, napi_value exports) {
  rte_nodejs_app_module_init(env, exports);
  rte_nodejs_addon_module_init(env, exports);
  rte_nodejs_metadata_module_init(env, exports);
  rte_nodejs_msg_module_init(env, exports);
  rte_nodejs_cmd_module_init(env, exports);
  rte_nodejs_image_frame_module_init(env, exports);
  rte_nodejs_pcm_frame_module_init(env, exports);
  rte_nodejs_extension_module_init(env, exports);
  rte_nodejs_extension_group_module_init(env, exports);
  rte_nodejs_rte_module_init(env, exports);
  rte_nodejs_value_module_init(env, exports);
  rte_nodejs_common_module_init(env, exports);

  napi_add_env_cleanup_hook(env, rte_nodejs_clean_env_sync, NULL);
  napi_add_async_cleanup_hook(env, rte_nodejs_clean_env_async, NULL, NULL);

  return exports;
}

NAPI_MODULE(rte_runtime_nodejs, Init)
