// Copyright 2022 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_COMPOSITE_SAMPLE_CONTROLLER_CONTROLLER_H_
#define SRC_COMPOSITE_SAMPLE_CONTROLLER_CONTROLLER_H_

#include <lib/driver/component/cpp/driver_cpp.h>
#include <lib/driver/compat/cpp/device_server.h>

namespace controller_driver {

class ControllerDriver : public driver::DriverBase {
 public:
  ControllerDriver(driver::DriverStartArgs start_args, fdf::UnownedDispatcher driver_dispatcher)
      : driver::DriverBase("controller_driver", std::move(start_args),
                           std::move(driver_dispatcher)) {}
  virtual ~ControllerDriver() = default;

  zx::result<> Start() override;

 private:
  zx::result<> AddChild(std::string_view name, compat::DeviceServer& compat,
                        fidl::WireClient<fuchsia_driver_framework::NodeController>& controller);

  fidl::WireClient<fuchsia_driver_framework::Node> node_;
  fidl::WireClient<fuchsia_driver_framework::NodeController> child_one_;
  fidl::WireClient<fuchsia_driver_framework::NodeController> child_two_;

  compat::DeviceServer compat_server_one_;
  compat::DeviceServer compat_server_two_;
};

}  // namespace controller_driver

#endif  // SRC_COMPOSITE_SAMPLE_CONTROLLER_CONTROLLER_H_
