// Copyright 2018 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 "oobe_config/oobe_config_restore_service.h"

#include <string>

#include "oobe_config/load_oobe_config_rollback.h"
#include "oobe_config/load_oobe_config_usb.h"
#include "oobe_config/oobe_config.h"
#include "oobe_config/proto_bindings/oobe_config.pb.h"

#include <base/check.h>

using brillo::dbus_utils::AsyncEventSequencer;

namespace oobe_config {

OobeConfigRestoreService::OobeConfigRestoreService(
    std::unique_ptr<brillo::dbus_utils::DBusObject> dbus_object,
    bool allow_unencrypted,
    bool skip_reboot_for_testing)
    : org::chromium::OobeConfigRestoreAdaptor(this),
      dbus_object_(std::move(dbus_object)),
      allow_unencrypted_(allow_unencrypted),
      skip_reboot_for_testing_(skip_reboot_for_testing) {}

OobeConfigRestoreService::~OobeConfigRestoreService() = default;

void OobeConfigRestoreService::RegisterAsync(
    const AsyncEventSequencer::CompletionAction& completion_callback) {
  RegisterWithDBusObject(dbus_object_.get());
  dbus_object_->RegisterAsync(completion_callback);
}

void OobeConfigRestoreService::ProcessAndGetOobeAutoConfig(
    int32_t* error, OobeRestoreData* oobe_config_proto) {
  DCHECK(error);
  DCHECK(oobe_config_proto);

  LOG(INFO) << "Chrome requested OOBE config.";
  power_manager_proxy_ = std::make_unique<org::chromium::PowerManagerProxy>(
      dbus_object_->GetBus());

  OobeConfig oobe_config;
  LoadOobeConfigRollback load_oobe_config_rollback(
      &oobe_config, allow_unencrypted_, skip_reboot_for_testing_,
      power_manager_proxy_.get());
  std::string chrome_config_json, unused_enrollment_domain;

  // There is rollback data so attempt to parse it.
  const bool rollback_success = load_oobe_config_rollback.GetOobeConfigJson(
      &chrome_config_json, &unused_enrollment_domain);
  if (rollback_success) {
    LOG(WARNING) << "Rollback oobe config sent: " << chrome_config_json;
  } else {
    LOG(INFO) << "Rollback oobe config not found.";

    // There is no rollback data so attempt USB config.
    auto config_loader = LoadOobeConfigUsb::CreateInstance();

    const bool usb_config_success = config_loader->GetOobeConfigJson(
        &chrome_config_json, &unused_enrollment_domain);
    if (usb_config_success) {
      LOG(INFO) << "USB oobe config found :) ";
    } else {
      LOG(WARNING) << "USB oobe config not found :(";
    }
  }

  oobe_config_proto->set_chrome_config_json(chrome_config_json);
  *error = 0;
}

}  // namespace oobe_config
