// Copyright 2016 The Cobalt Authors. All Rights Reserved.
//
// Licensed 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.

#ifndef COBALT_DEBUG_RUNTIME_COMPONENT_H_
#define COBALT_DEBUG_RUNTIME_COMPONENT_H_

#include <string>

#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "cobalt/debug/component_connector.h"
#include "cobalt/debug/debug_script_runner.h"
#include "cobalt/debug/json_object.h"

namespace cobalt {
namespace debug {

class RuntimeComponent {
 public:
  explicit RuntimeComponent(ComponentConnector* connector);

 private:
  // Command handlers.
  JSONObject CallFunctionOn(const JSONObject& params);
  JSONObject Disable(const JSONObject& params);
  JSONObject Enable(const JSONObject& params);
  JSONObject Evaluate(const JSONObject& params);
  JSONObject GetProperties(const JSONObject& params);
  JSONObject ReleaseObject(const JSONObject& params);
  JSONObject ReleaseObjectGroup(const JSONObject& params);

  // Sends an event to the client to notify an execution context has been
  // created. Currently we just send this event once when the component
  // is enabled, passing default values.
  void OnExecutionContextCreated();

  // Helper object to connect to the debug server, etc.
  ComponentConnector* connector_;
};

}  // namespace debug
}  // namespace cobalt

#endif  // COBALT_DEBUG_RUNTIME_COMPONENT_H_
