#include "include/private/dvr/display_manager_client.h"

#include <pdx/default_transport/client_channel_factory.h>
#include <private/dvr/buffer_hub_client.h>
#include <private/dvr/buffer_hub_queue_client.h>
#include <private/dvr/display_protocol.h>
#include <utils/Log.h>

using android::pdx::ErrorStatus;
using android::pdx::LocalChannelHandle;
using android::pdx::Transaction;

namespace android {
namespace dvr {
namespace display {

DisplayManagerClient::DisplayManagerClient()
    : BASE(pdx::default_transport::ClientChannelFactory::Create(
          DisplayManagerProtocol::kClientPath)) {}

DisplayManagerClient::~DisplayManagerClient() {}

pdx::Status<std::vector<display::SurfaceState>>
DisplayManagerClient::GetSurfaceState() {
  auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceState>();
  if (!status) {
    ALOGE(
        "DisplayManagerClient::GetSurfaceState: Failed to get surface info: %s",
        status.GetErrorMessage().c_str());
  }

  return status;
}

pdx::Status<std::unique_ptr<ConsumerQueue>>
DisplayManagerClient::GetSurfaceQueue(int surface_id, int queue_id) {
  auto status = InvokeRemoteMethod<DisplayManagerProtocol::GetSurfaceQueue>(
      surface_id, queue_id);
  if (!status) {
    ALOGE(
        "DisplayManagerClient::GetSurfaceQueue: Failed to get queue for "
        "surface_id=%d queue_id=%d: %s",
        surface_id, queue_id, status.GetErrorMessage().c_str());
    return status.error_status();
  }

  return {ConsumerQueue::Import(status.take())};
}

}  // namespace display
}  // namespace dvr
}  // namespace android
