#include "lib/demo_extension_engine.h"
#include "lib/event_notify_template.h"


namespace ems {
DemoExtensionEngine::DemoExtensionEngine(){
}

DemoExtensionEngine::~DemoExtensionEngine(){
}

void DemoExtensionEngine::Initialize(ExtensionContext* context) {
  context_ = context;
  InitHandlerMap();
}

// Methods
void DemoExtensionEngine::InitHandlerMap() {
  // you should add some methods for js calling at here.
  DEFINE_CALL_METHOD(Func1);
  DEFINE_CALL_METHOD(Func2);
}

void DemoExtensionEngine::CallMethod(
    const std::string& method,
    const std::string& params,
    owcr::extension::IExtensionMethodCallback* call_back) {
  if (method_handler_map_.find(method) == method_handler_map_.end()) {
    call_back->OnMethodError(owcr::extension::E_METHOD_NOT_SUPPORTED, "", 0);
    return;
  }
  DEFINE_DISPATCH_METHOD(method, params, call_back);
}

DemoExtensionEngine* DemoExtensionEngine::GetInstance() {
  static DemoExtensionEngine* ma_extension_engine = CreateMaExtensionEngine();
  return ma_extension_engine;
}

DemoExtensionEngine* DemoExtensionEngine::CreateMaExtensionEngine() {
  return new DemoExtensionEngine();
}

bool DemoExtensionEngine::ParseJson(const std::string& json_str,
                                    Json::Value& value) {
  Json::CharReaderBuilder json_reader_builder;
  std::unique_ptr<Json::CharReader> reader(json_reader_builder.newCharReader());
  std::string parse_error;
  return reader->parse(json_str.c_str(), json_str.c_str() + json_str.length(),
                        &value, &parse_error);
}

}