<?php

/**
 * This Software is the property of Data Development and is protected
 * by copyright law - it is NOT Freeware.
 *
 * Any unauthorized use of this software without a valid license
 * is a violation of the license agreement and will be prosecuted by
 * civil and criminal law.
 *
 * http://www.shopmodule.com
 *
 * @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
 * @author    D3 Data Development - Daniel Seifert <support@shopmodule.com>
 * @link      http://www.oxidmodule.com
 */

namespace D3\PdfDocuments\Modules\Application\Model;

use D3\PdfDocuments\Application\Model\Interfaces\pdfdocuments_order_interface as OrderPdfInterface;
use D3\PdfDocuments\Application\Model\Documents\invoicePdf;
use D3\PdfDocuments\Application\Model\Documents\deliverynotePdf;
use OxidEsales\Eshop\Core\Registry;
use Spipu\Html2Pdf\Exception\Html2PdfException;

class d3_Order_PdfDocuments extends d3_Order_PdfDocuments_parent
{
    /**
     * @param string $sFilename
     * @param int $iSelLang
     * @param string $target
     * @throws Html2PdfException
     */
    public function genPdf($sFilename, $iSelLang = 0, $target = 'I')
    {
        $Pdf= $this->getPdfClass();

        $Pdf->setOrder($this);
        $Pdf->genPdf($sFilename, $iSelLang = 0, $target = 'I');
    }

    public function getPdfClass()
    {
        switch (Registry::getRequest()->getRequestParameter('pdftype')) {
            case ('dnote'):
            case ('dnote_without_logo'):
                $pdfInstance= oxNew(deliverynotePdf::class);
                $pdfInstance->setOrder($this);
                return $pdfInstance;
            case ('standart'):
            case('standart_without_logo'):
                $pdfInvoice= oxNew(invoicePdf::class);
                $pdfInvoice->setOrder($this);
                return $pdfInvoice;
            default:
                return $this->getCustomPdfClass();
        }
    }

  /**
   * @return OrderPdfInterface
   * @throws \OxidEsales\Eshop\Core\Exception\SystemComponentException
   * @throws \oxSystemComponentException
   */
    public function getCustomPdfClass()
    {
        $pdfInvoice= oxNew(invoicePdf::class);
        $pdfInvoice->setOrder($this);

        return $pdfInvoice;
    }
}