// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_DEVELOPER_SHELL_JOSH_LIB_RUNTIME_H_
#define SRC_DEVELOPER_SHELL_JOSH_LIB_RUNTIME_H_

#include <string>

#include "third_party/quickjs/quickjs-libc.h"
#include "third_party/quickjs/quickjs.h"

namespace shell {

// A C++ wrapper for the JSRuntime type.  Creates a JSRuntime and manages its lifetime.
class Runtime {
 public:
  Runtime();

  JSRuntime* Get() const { return rt_; }

  ~Runtime();

 private:
  JSRuntime* rt_;
  bool is_valid_;
};

// A C++ wrapper for the JSContext type.  You can have multiple JSContexts for a given JSRuntime.
// Creates a JSContext and manages its lifetime.
class Context {
 public:
  Context(const Runtime* rt);
  ~Context();

  JSContext* Get() const { return ctx_; }
  void DumpError() { js_std_dump_error(ctx_); }

  // Initializes standard libc functions and makes them available via globalThis.
  bool InitStd();

  // Initialize Fuchsia-isms: zx_internal, fdio, etc.
  // fidl_path is the directory to look for the FIDL IR.
  // boot_js_path is the directory to look for builtin JS (like ls and friends).
  bool InitBuiltins(const std::string& fidl_path, const std::string& boot_js_path);

  // Loads JS from the given lib.
  // If js_path is empty, it will load it from a predefined module  of that name.
  // If js_path is non-empty, it will load it from a similarly named JS file relative to js_path.
  // For example, if you pass "ns", it will load "$path/ns.js". This can obviously be made better
  // (e.g., support subdirectories, handle missing files), but we don't need that yet.
  bool Export(const std::string&, const std::string& js_path = "");

 private:
  JSContext* ctx_;
  bool is_valid_;
};

}  // namespace shell

#endif  // SRC_DEVELOPER_SHELL_JOSH_LIB_RUNTIME_H_
