// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_STORAGE_BLOBFS_CORRUPT_FS_BLOCK_CLIENT_H_
#define SRC_STORAGE_BLOBFS_CORRUPT_FS_BLOCK_CLIENT_H_

#include <lib/zx/vmo.h>

#include <memory>

#include <block-client/cpp/block-device.h>
#include <fbl/macros.h>

// Wrapper around a BlockDevice that provides a simple ReadBlock/WriteBlock API using blobfs block
// indices instead of device block indices. This class is not threadsafe.
class FsBlockClient {
 public:
  // Not copyable or movable.
  FsBlockClient(FsBlockClient&) = delete;
  FsBlockClient& operator=(FsBlockClient&) = delete;

  ~FsBlockClient();

  // Creates a new FsBlockClient using the given BlockDevice.
  static zx_status_t Create(std::unique_ptr<block_client::BlockDevice> device,
                            std::unique_ptr<FsBlockClient>* out);

  // Returns the length of this block device in terms of blobfs blocks.
  uint64_t BlockCount() const;

  // Reads the blobfs block into the provided buffer. Data must contain at least kBlobfsBlockSize
  // bytes.
  zx_status_t ReadBlock(uint64_t block, void* data);

  // Writes the blobfs block using the provided buffer. Data must contain at least kBlobfsBlockSize
  // bytes.
  zx_status_t WriteBlock(uint64_t block, const void* data);

 private:
  FsBlockClient(std::unique_ptr<block_client::BlockDevice> device,
                fuchsia_hardware_block_BlockInfo block_info, zx::vmo vmo,
                storage::Vmoid vmoid);
  uint64_t device_blocks_per_blobfs_block() const;
  uint64_t fs_block_to_device_block(uint64_t block) const;

  std::unique_ptr<block_client::BlockDevice> device_;
  fuchsia_hardware_block_BlockInfo block_info_;
  zx::vmo vmo_;
  storage::Vmoid vmoid_;
};

#endif  // SRC_STORAGE_BLOBFS_CORRUPT_FS_BLOCK_CLIENT_H_
