// Copyright 2021 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_CAMERA_BIN_SENSOR_CLI_DEBUG_CLIENT_H_
#define SRC_CAMERA_BIN_SENSOR_CLI_DEBUG_CLIENT_H_

#include <fuchsia/camera2/debug/cpp/fidl.h>
#include <fuchsia/camera2/hal/cpp/fidl.h>
#include <fuchsia/hardware/camera/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/sys/cpp/component_context.h>

namespace camera {

struct Service {
  std::string name;
  std::string service_path;
};

// DebugClient allow the simple exercise of passing arguments to the service side (camera
// controller). The arguments are passed as-is. Range checks must be done by the service side.
class DebugClient {
 public:
  explicit DebugClient(async::Loop& loop);

  void Start(uint32_t mode);

 private:
  DebugClient(const DebugClient&) = delete;
  DebugClient& operator=(const DebugClient&) = delete;

  void Execute();
  bool ConnectToServer();
  void SendCommand(uint32_t mode);
  void Quit();

  async::Loop& loop_;
  std::unique_ptr<sys::ComponentContext> context_;
  fuchsia::hardware::camera::DeviceSyncPtr device_sync_ptr_;
  fuchsia::camera2::debug::DebugPtr debug_ptr_;
};

}  // namespace camera

#endif  // SRC_CAMERA_BIN_SENSOR_CLI_DEBUG_CLIENT_H_
