// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_PERSISTENT_CACHE_BACKEND_H_
#define COMPONENTS_PERSISTENT_CACHE_BACKEND_H_

#include <stdint.h>

#include <optional>
#include <string_view>

#include "base/component_export.h"
#include "base/containers/span.h"
#include "base/types/expected.h"
#include "components/persistent_cache/backend_params.h"
#include "components/persistent_cache/entry_metadata.h"
#include "components/persistent_cache/transaction_error.h"

namespace persistent_cache {

class Entry;

// The persistence mechanism backing up the cache.
class COMPONENT_EXPORT(PERSISTENT_CACHE) Backend {
 public:
  virtual ~Backend();

  // Not copyable or moveable.
  Backend(const Backend&) = delete;
  Backend(Backend&&) = delete;
  Backend& operator=(const Backend&) = delete;
  Backend& operator=(Backend&&) = delete;

  // Initializes the cache. Must be called exactly once before any other
  // method. No further method can be called if this fails.
  virtual bool Initialize() = 0;

  // See `PersistentCache::Find()`.
  // Note: Backends have to outlive entries they vend.
  //
  // Thread-safe.
  virtual base::expected<std::unique_ptr<Entry>, TransactionError> Find(
      std::string_view key) = 0;

  // See `PersistentCache::Insert()`.
  // Thread-safe.
  virtual base::expected<void, TransactionError> Insert(
      std::string_view key,
      base::span<const uint8_t> content,
      EntryMetadata metadata) = 0;

  // Used to get type of instance. Intended for things like metrics recording.
  // Externally behavior of all backend types should be equivalent and control
  // flow should not be tailored to the type.
  virtual BackendType GetType() const = 0;

  // Used to understand if the instance has read only access. Intended for
  // things like metrics recording. Externally behavior of all backend types
  // should be equivalent for reads. Writes should probably not be attempted if
  // not permitted.
  virtual bool IsReadOnly() const = 0;

  // Returns params for an independent read-only connection to the instance, or
  // nothing in case of error.
  virtual std::optional<BackendParams> ExportReadOnlyParams() = 0;

  // Returns params for an independent read-write connection to the instance, or
  // nothing in case of error.
  virtual std::optional<BackendParams> ExportReadWriteParams() = 0;

  // See `PersistentCache::Abandon()` documentation.
  virtual void Abandon() = 0;

 protected:
  Backend();
};

}  // namespace persistent_cache

#endif  // COMPONENTS_PERSISTENT_CACHE_BACKEND_H_
