// Copyright 2017 PDFium 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 TESTING_FAKE_FILE_ACCESS_H_
#define TESTING_FAKE_FILE_ACCESS_H_

#include <memory>

#include "core/fxcrt/unowned_ptr.h"
#include "public/fpdf_dataavail.h"
#include "public/fpdfview.h"
#include "testing/range_set.h"

class FakeFileAccess {
 public:
  explicit FakeFileAccess(FPDF_FILEACCESS* file_access);
  ~FakeFileAccess();

  FPDF_FILEACCESS* GetFileAccess() const { return file_access_wrapper_.get(); }
  FX_FILEAVAIL* GetFileAvail() const { return file_avail_.get(); }
  FX_DOWNLOADHINTS* GetDownloadHints() const { return download_hints_.get(); }

  FPDF_BOOL IsDataAvail(size_t offset, size_t size) const;
  void AddSegment(size_t offset, size_t size);

  unsigned long GetFileSize();

  int GetBlock(unsigned long position, unsigned char* pBuf, unsigned long size);
  void SetRequestedDataAvailable();
  void SetWholeFileAvailable();

 private:
  UnownedPtr<FPDF_FILEACCESS> file_access_;
  std::unique_ptr<FPDF_FILEACCESS> file_access_wrapper_;
  std::unique_ptr<FX_FILEAVAIL> file_avail_;
  std::unique_ptr<FX_DOWNLOADHINTS> download_hints_;
  RangeSet available_data_;
  RangeSet requested_data_;
};

#endif  // TESTING_FAKE_FILE_ACCESS_H_
