// Copyright 2021 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 <string>

#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/logging.h>
#include <base/strings/string_number_conversions.h>
#include <base/strings/string_util.h>
#include <brillo/syslog_logging.h>

#include "tpm2-simulator/tpm_executor_version.h"

using tpm2_simulator::TpmExecutorVersion;

namespace {
const char kTpmVersionFile[] =
    "/mnt/stateful_partition/unencrypted/tpm2-simulator/tpm_executor_version";

constexpr TpmExecutorVersion GetDefaultTpmExecutorVersion() {
#if USE_TPM2
  return TpmExecutorVersion::kTpm2;
#elif USE_TPM1
  return TpmExecutorVersion::kTpm1;
#endif
}
}  // namespace

namespace tpm2_simulator {

TpmExecutorVersion GetTpmExecutorVersion() {
  base::FilePath file_path(kTpmVersionFile);
  std::string file_content;

  if (!base::ReadFileToString(file_path, &file_content)) {
    // Use the default version.
    return GetDefaultTpmExecutorVersion();
  }

  std::string version_str;
  base::TrimWhitespaceASCII(file_content, base::TRIM_ALL, &version_str);

  int executor_version = 0;
  if (!base::StringToInt(version_str, &executor_version)) {
    LOG(ERROR) << "Executor version is not a number";
    return GetDefaultTpmExecutorVersion();
  }
  return static_cast<TpmExecutorVersion>(executor_version);
}

}  // namespace tpm2_simulator
