#ifndef PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_PERSISTENT_STORAGE_BMC_H_
#define PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_PERSISTENT_STORAGE_BMC_H_

#include <cstdint>
#include <string>
#include <vector>

#include "persistent_storage.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/string_view.h"

namespace persistent_storage {
// b/359687259 make kRWFSPath and size configurable
constexpr std::uintmax_t kMaxFileSize = 16384;  // 16 k
constexpr absl::string_view kRWFSPath = "/var/google/gPowerD/SavedActions/";
constexpr uint32_t kProtoKeepNumber = 10;

constexpr absl::string_view kfileNamePrefix = "savedactions";

struct PersistentStorageManagerBMC
    : public safepower_agent::PersistentStorageManager {
 public:
  ~PersistentStorageManagerBMC() override = default;

  // Writes a delta to the saved actions to persistent storage.
  absl::Status WriteSavedActionsChange(
      const safepower_agent_persistence_proto::SavedActions& actions) override;

  absl::Status WriteSavedActionsChange(
      const safepower_agent_persistence_proto::SavedActions& actions,
      absl::string_view dir_path);

  // Reads all saved actions from persistent storage.
  absl::StatusOr<safepower_agent_persistence_proto::SavedActions>
  ReadSavedActions() override;

  absl::StatusOr<safepower_agent_persistence_proto::SavedActions>
  ReadSavedActions(absl::string_view dir_path);
 private:
  absl::Status ConvertAppendToMap(
    safepower_agent_persistence_proto::SavedActions& map,
    safepower_agent_persistence_proto::SavedActionAppendLog& log);

  // keep the most recent protos is called when the size of the saved files is
  // larger then the kmaxFileSize. In the event of large protos we will always
  // have at least kProtoKeepNumber of messages. That garuantees was more
  // important then miniziains the file size. From a design perspective it would
  // be ideal if kMaxFileSize was reached at 2*kProtoKeepNumber, but that is not
  // necessary.
  absl::Status keepMostRecentProtos(
      safepower_agent_persistence_proto::SavedActions& map,
      uint32_t keepNumber = kProtoKeepNumber);
  absl::StatusOr<uint64_t> findLargestFileId
      (const std::vector<std::string>& files);
  absl::StatusOr<std::vector<std::string> >
      listFiles(absl::string_view file_path);
  absl::Status deleteAllFilesExceptLargest(absl::string_view file_path);
  std::string MakeFileName(absl::string_view file_path, uint64_t file_id);
};

}  // namespace persistent_storage

#endif  // PRODUCTION_SUSHID_SAFEPOWER_AGENT_BMC_PERSISTENT_STORAGE_BMC_H_
