#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_METRICS_BMC_STATIC_METRICS_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_METRICS_BMC_STATIC_METRICS_H_

#include <memory>
#include <string>
#include <string_view>

#include "absl/status/statusor.h"

namespace milotic_tlbmc {

// This class defined all metrics that are constant for the lifetime of the BMC.
class BmcStaticMetrics {
 public:
  static absl::StatusOr<std::unique_ptr<BmcStaticMetrics>> Create(
      std::string_view root_path = "/");

  std::string GetBmcFirmwareVersion() const;
  std::string GetBmcFirmwareVersionId() const;
  std::string GetBmcUuid() const;

 protected:
  BmcStaticMetrics() = default;

  static absl::StatusOr<std::string> FetchBmcFirmwareVersion(
      std::string_view root_path);

  // This firmware version ID is the same as
  // https://github.com/openbmc/phosphor-bmc-code-mgmt/blob/de331ae49afd6fe27271c4081ffa239746bda8b5/bmc/item_updater.cpp#L322
  static absl::StatusOr<std::string> FetchBmcFirmwareVersionId(
      std::string_view root_path, std::string_view bmc_firmware_version);

  // BMC rofs flash id is under /run/media. There should only be one flash Id.
  static absl::StatusOr<std::string> FetchBmcFirmwareFlashId(
      std::string_view root_path);

  static absl::StatusOr<std::string> FetchBmcUuid();

 private:
  explicit BmcStaticMetrics(std::string_view bmc_firmware_version,
                            std::string_view bmc_firmware_version_id,
                            std::string_view bmc_uuid)
      : bmc_firmware_version_(bmc_firmware_version),
        bmc_firmware_version_id_(bmc_firmware_version_id),
        bmc_uuid_(bmc_uuid) {}

  std::string bmc_firmware_version_;
  std::string bmc_firmware_version_id_;
  std::string bmc_uuid_;
};

}  // namespace milotic_tlbmc

#endif  // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_METRICS_BMC_STATIC_METRICS_H_
