#include "src/lib/cobalt/cpp/project_profile.h"

#include "lib/fsl/vmo/file.h"
#include "lib/fsl/vmo/strings.h"
#include "third_party/cobalt/util/crypto_util/base64.h"

namespace cobalt {

fuchsia::cobalt::ProjectProfile ProjectProfileFromBase64String(
    const std::string &encoded_cfg) {
  std::string cfg;
  cobalt::crypto::Base64Decode(encoded_cfg, &cfg);

  return ProjectProfileFromString(cfg);
}

fuchsia::cobalt::ProjectProfile ProjectProfileFromString(
    const std::string &cfg) {
  fsl::SizedVmo config_vmo;
  bool success = fsl::VmoFromString(cfg, &config_vmo);
  FXL_CHECK(success)
      << "Could not convert Cobalt metrics registry string into VMO";

  return ProjectProfileFromVmo(std::move(config_vmo));
}

fuchsia::cobalt::ProjectProfile ProjectProfileFromFile(
    const std::string &filename) {
  fsl::SizedVmo config_vmo;
  bool success = fsl::VmoFromFilename(filename, &config_vmo);
  FXL_CHECK(success) << "Could not read Cobalt metrics registry file into VMO";

  return ProjectProfileFromVmo(std::move(config_vmo));
}

fuchsia::cobalt::ProjectProfile ProjectProfileFromVmo(fsl::SizedVmo vmo) {
  fuchsia::cobalt::ProjectProfile profile;
  profile.config = std::move(vmo).ToTransport();
  return profile;
}

}  // namespace cobalt
