// Copyright 2019 The TAL Authors. All rights reserved.
#ifndef LIB_EMS_DEMO_EXTERNAL_MEDIA_APPLY_ENGINE_H_
#define LIB_EMS_DEMO_EXTERNAL_MEDIA_APPLY_ENGINE_H_

#include <map>
#include<string>
#include "json/json.h"
#include "lib/extension_context.h"

namespace ems {

class DemoExtensionEngine {
 public:
  typedef void (DemoExtensionEngine::*MethodHandler)(
      const std::string&,
      owcr::extension::IExtensionMethodCallback*);

  DemoExtensionEngine();
  virtual ~DemoExtensionEngine();

  virtual void Initialize(ExtensionContext* context);
  void CallMethod(const std::string& method,
      const std::string& params,
      owcr::extension::IExtensionMethodCallback* call_back);
  static DemoExtensionEngine* GetInstance();
  // methods,the extesion methods by js calling
  void OnCallMethod_Func1(const std::string& params,
                          owcr::extension::IExtensionMethodCallback*);
  void OnCallMethod_Func2(const std::string& params,
                          owcr::extension::IExtensionMethodCallback*);

 protected:
  static DemoExtensionEngine* CreateMaExtensionEngine();
  // called when DemoExtensionEngin Initialize,Add extesion methods for js call
  void InitHandlerMap();

 private:
  bool ParseJson(const std::string& json_str, Json::Value& value);
  ExtensionContext* context_;
  std::map<std::string, MethodHandler> method_handler_map_;
};
}  // namespace ems
#endif
