// Copyright 2018 The Chromium 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 PDF_PDFIUM_PDFIUM_DOCUMENT_H_
#define PDF_PDFIUM_PDFIUM_DOCUMENT_H_

#include "base/macros.h"
#include "third_party/pdfium/public/cpp/fpdf_scopers.h"
#include "third_party/pdfium/public/fpdf_dataavail.h"
#include "third_party/pdfium/public/fpdfview.h"

namespace chrome_pdf {

class DocumentLoader;

class PDFiumDocument {
 public:
  explicit PDFiumDocument(DocumentLoader* doc_loader);
  ~PDFiumDocument();

  FPDF_FILEACCESS& file_access() { return *file_access_; }
  FX_FILEAVAIL& file_availability() { return *file_availability_; }
  FX_DOWNLOADHINTS& download_hints() { return *download_hints_; }

  FPDF_AVAIL fpdf_availability() const { return fpdf_availability_.get(); }
  FPDF_DOCUMENT doc() const { return doc_handle_.get(); }
  FPDF_FORMHANDLE form() const { return form_handle_.get(); }

  int form_status() const { return form_status_; }

  void CreateFPDFAvailability();
  void ResetFPDFAvailability();

  void LoadDocument(const char* password);

  void SetFormStatus();
  void InitializeForm(FPDF_FORMFILLINFO* form_info);

 private:
  DocumentLoader* const doc_loader_;

  // Interface structure to provide access to document stream.
  std::unique_ptr<FPDF_FILEACCESS> file_access_;

  // Interface structure to check data availability in the document stream.
  std::unique_ptr<FX_FILEAVAIL> file_availability_;

  // Interface structure to request data chunks from the document stream.
  std::unique_ptr<FX_DOWNLOADHINTS> download_hints_;

  // Pointer to the document availability interface.
  ScopedFPDFAvail fpdf_availability_;

  // The PDFium wrapper object for the document. Must come after
  // |fpdf_availability_| to prevent outliving it.
  ScopedFPDFDocument doc_handle_;

  // The PDFium wrapper for form data.  Used even if there are no form controls
  // on the page. Must come after |doc_handle_| to prevent outliving it.
  ScopedFPDFFormHandle form_handle_;

  // Current form availability status.
  int form_status_ = PDF_FORM_NOTAVAIL;

  DISALLOW_COPY_AND_ASSIGN(PDFiumDocument);
};

}  // namespace chrome_pdf

#endif  // PDF_PDFIUM_PDFIUM_DOCUMENT_H_
