// Copyright 2019 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 "diagnostics/dpsl/test_utils/common.h"

#include <iostream>
#include <memory>
#include <string>
#include <utility>

#include <base/json/json_reader.h>
#include <base/json/json_writer.h>
#include <base/values.h>
#include <google/protobuf/message.h>
#include <google/protobuf/util/json_util.h>

namespace diagnostics {
namespace test_utils {

bool PrintProto(const google::protobuf::Message& message) {
  // Convert the Proto to JSON.
  std::string body_json;
  auto status =
      google::protobuf::util::MessageToJsonString(message, &body_json);
  if (!status.ok()) {
    std::cerr << "Failed to convert proto to JSON: " << status << "\n";
    return false;
  }

  // Then convert the JSON back to a base::Value.
  auto body = base::JSONReader::Read(body_json);
  if (!body) {
    std::cerr << "Failed to parse JSON to base::Value: " << body_json << '\n';
    return false;
  }

  // Embed the body and name of the proto in a base::Value.
  base::Value value(base::Value::Type::DICTIONARY);
  value.SetStringKey("name", message.GetDescriptor()->name());
  value.SetKey("body", std::move(*body));

  // Serialize the base::Value back to JSON.
  std::string message_json;
  base::JSONWriter::WriteWithOptions(
      value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &message_json);
  std::cout << message_json << std::endl;

  return true;
}

}  // namespace test_utils
}  // namespace diagnostics
