//========================================================================
//
// PDFDocFactory.h
//
// This file is licensed under the GPLv2 or later
//
// Copyright 2010 Hib Eris <hib@hiberis.nl>
// Copyright 2010, 2018, 2021, 2022 Albert Astals Cid <aacid@kde.org>
// Copyright 2019, 2021 Oliver Sander <oliver.sander@tu-dresden.de>
//
//========================================================================

#ifndef PDFDOCFACTORY_H
#define PDFDOCFACTORY_H

#include <memory>

#include "PDFDoc.h"
#include "poppler_private_export.h"

class GooString;
class PDFDocBuilder;

//------------------------------------------------------------------------
// PDFDocFactory
//
// PDFDocFactory allows the construction of PDFDocs from different URIs.
//
// By default, it supports local files, 'file://' and 'fd:0' (stdin). When
// compiled with libcurl, it also supports 'http://' and 'https://'.
//
// You can extend the supported URIs by giving a list of PDFDocBuilders to
// the constructor, or by registering a new PDFDocBuilder afterwards.
//------------------------------------------------------------------------

class POPPLER_PRIVATE_EXPORT PDFDocFactory
{

public:
    explicit PDFDocFactory(std::vector<PDFDocBuilder *> *pdfDocBuilders = nullptr);
    ~PDFDocFactory();

    PDFDocFactory(const PDFDocFactory &) = delete;
    PDFDocFactory &operator=(const PDFDocFactory &) = delete;

    // Create a PDFDoc. Returns a PDFDoc. You should check this PDFDoc
    // with PDFDoc::isOk() for failures.
    // The caller is responsible for deleting ownerPassword, userPassWord and guiData.
    std::unique_ptr<PDFDoc> createPDFDoc(const GooString &uri, const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, void *guiDataA = nullptr);

    // Extend supported URIs with the ones from the PDFDocBuilder.
    void registerPDFDocBuilder(PDFDocBuilder *pdfDocBuilder);

private:
    std::vector<PDFDocBuilder *> *builders;
};

#endif /* PDFDOCFACTORY_H */
