// Copyright 2025 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_SQLITE_BACKEND_STORAGE_DELEGATE_H_
#define COMPONENTS_PERSISTENT_CACHE_SQLITE_BACKEND_STORAGE_DELEGATE_H_

#include "base/component_export.h"
#include "components/persistent_cache/backend_storage.h"

namespace persistent_cache::sqlite {

// A delegate that manages storage on behalf of SqliteBackendImpl.
class COMPONENT_EXPORT(PERSISTENT_CACHE) BackendStorageDelegate
    : public BackendStorage::Delegate {
 public:
  // BackendStorage::Delegate:
  base::expected<PendingBackend, TransactionError> MakePendingBackend(
      Client client,
      const base::FilePath& directory,
      const base::FilePath& base_name,
      bool single_connection,
      bool journal_mode_wal) override;
  base::expected<std::unique_ptr<Backend>, TransactionError> MakeBackend(
      Client client,
      const base::FilePath& directory,
      const base::FilePath& base_name,
      bool single_connection,
      bool journal_mode_wal) override;
  std::optional<PendingBackend> ShareReadOnlyConnection(
      const base::FilePath& directory,
      const base::FilePath& base_name,
      const Backend& backend) override;
  std::optional<PendingBackend> ShareReadWriteConnection(
      const base::FilePath& directory,
      const base::FilePath& base_name,
      const Backend& backend) override;

  // Returns the basename of `file` without its extension if its extension is
  // ".db".
  base::FilePath GetBaseName(const base::FilePath& file) override;

  // Deletes all SQLite files for `base_name` in `directory` (e.g., the .db and
  // .journal files).
  int64_t DeleteFiles(Client client,
                      const base::FilePath& directory,
                      const base::FilePath& base_name) override;
};

}  // namespace persistent_cache::sqlite

#endif  // COMPONENTS_PERSISTENT_CACHE_SQLITE_BACKEND_STORAGE_DELEGATE_H_
