// Copyright 2018 The Chromium 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 BASE_FUCHSIA_COMPONENT_CONTEXT_H_
#define BASE_FUCHSIA_COMPONENT_CONTEXT_H_

#include <lib/zx/channel.h>

#include "base/base_export.h"
#include "base/fuchsia/fidl_interface_request.h"
#include "base/macros.h"
#include "base/strings/string_piece.h"
#include "starboard/types.h"

namespace fidl {

template <typename Interface>
class InterfacePtr;

template <typename Interface>
class SynchronousInterfacePtr;

}  // namespace fidl

namespace base {
namespace fuchsia {

// Provides access to the component's environment.
class BASE_EXPORT ComponentContext {
 public:
  explicit ComponentContext(zx::channel service_root);
  ~ComponentContext();

  // Returns default ComponentContext instance for the current process. It uses
  // /srv namespace to connect to environment services.
  static ComponentContext* GetDefault();

  // Satisfies the interface |request| by binding the channel to a service.
  zx_status_t ConnectToService(FidlInterfaceRequest request);

  // Same as above, but returns interface pointer instead of taking a request.
  template <typename Interface>
  fidl::InterfacePtr<Interface> ConnectToService() {
    fidl::InterfacePtr<Interface> result;
    ConnectToService(FidlInterfaceRequest(&result));
    return result;
  }

  // Connects to an environment service and returns synchronous interface
  // implementation.
  template <typename Interface>
  fidl::SynchronousInterfacePtr<Interface> ConnectToServiceSync() {
    fidl::SynchronousInterfacePtr<Interface> result;
    ConnectToService(FidlInterfaceRequest(&result));
    return result;
  }

 private:
  zx::channel service_root_;

  DISALLOW_COPY_AND_ASSIGN(ComponentContext);
};

}  // namespace fuchsia
}  // namespace base

#endif  // BASE_FUCHSIA_COMPONENT_CONTEXT_H_
