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

#include "ml/dlcservice_client.h"

#include <utility>

#include <base/bind.h>
#include <chromeos/dbus/service_constants.h>
#include <dbus/dlcservice/dbus-constants.h>
#include <dbus/message.h>
#include <dlcservice/proto_bindings/dlcservice.pb.h>

namespace ml {

void DlcserviceClient::GetDlcRootPath(const std::string& dlc_id,
                                      GetDlcRootPathCallback callback) {
  // Construct the dbus call.
  dbus::MethodCall method_call(dlcservice::kDlcServiceInterface,
                               dlcservice::kGetDlcStateMethod);
  dbus::MessageWriter writer(&method_call);
  writer.AppendString(dlc_id);

  // Make the call.
  dlcservice_proxy_->CallMethodWithErrorResponse(
      &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
      base::BindOnce(&OnGetDlcStateComplete, std::move(callback)));
}

DlcserviceClient::DlcserviceClient(dbus::Bus* bus)
    : dlcservice_proxy_(bus->GetObjectProxy(
          dlcservice::kDlcServiceServiceName,
          dbus::ObjectPath(dlcservice::kDlcServiceServicePath))) {}

// Calls `callback` either on root_path or empty string based on the `response`.
void DlcserviceClient::OnGetDlcStateComplete(
    GetDlcRootPathCallback callback,
    dbus::Response* response,
    dbus::ErrorResponse* err_response) {
  dlcservice::DlcState dlc_state;
  if (!response ||
      !dbus::MessageReader(response).PopArrayOfBytesAsProto(&dlc_state)) {
    LOG(ERROR) << "GetDlcState error " << err_response->GetErrorName();
    std::move(callback).Run(std::string());
    return;
  }
  if (dlc_state.state() != dlcservice::DlcState::INSTALLED) {
    LOG(ERROR) << "GetDlcRootPath error, dlc not installed with error "
               << dlc_state.last_error_code() << " and state "
               << dlc_state.state();
    std::move(callback).Run(std::string());
    return;
  }
  std::move(callback).Run(dlc_state.root_path());
}

}  // namespace ml
