<?php

require_once __DIR__ . '/tcpdf/tcpdf.php';
require_once __DIR__ . '/fpdi2/autoload.php';

class rechnung {

    private $pdf;
    private $tplID;
    private $absender = array('Fabian Hars', 'Süderquerweg 288', '21037 Hamburg');
    private $empfanger = array('', 'Fabian Hars', 'Versionblue', 'Süderquerweg 288', '21037 Hamburg');
    private $pos = array(
        array(1, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(2, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(3, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(4, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(5, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(6, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(7, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(8, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(9, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(10, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(11, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240),
        array(12, 'Individualprogrammierung eines Rechnungsverwaltungstolls für die digitaliesierung im Unternehmen', 28, 'Std', 80, 2240)
    );
    private $taxes = array();


    public function createPDF($vorlage=NULL) {
        $this->pdf = new \setasign\Fpdi\Tcpdf\Fpdi(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false, true);;
        $this->pdf->setPrintHeader(false);
        $this->pdf->setPrintFooter(false);
        $this->pdf->SetMargins(22, 22, 22);
        if(!empty($vorlage)) {
            if($this->tplID === null) {
                $this->pdf->setSourceFile($vorlage);
                $this->tplID = $this->pdf->importPage(1);
            }
            $this->pdf->useImportedPage($this->tplID);
        }
    }

    public function createHeader() {
        $this->pdf->AddPage();
        if($this->tplID !== null) {
            $this->pdf->useImportedPage($this->tplID);
        }

        //Abedender setzen
        $this->pdf->setXY(20,45);
        //$this->pdf->setY(44);
        $this->pdf->SetFont('dejavusans', '', 6);
        $this->pdf->Write(0, implode(' | ', $this->absender));

        $this->pdf->setXY(22,67);
        $this->pdf->SetFont('dejavusans', '', 9);
        $this->pdf->Write(0, $this->empfanger[0]);
        $this->pdf->ln();
        $this->pdf->SetFont('dejavusans', '', 9);
        $this->pdf->Write(0, $this->empfanger[1]);
        $this->pdf->ln();
        $this->pdf->SetFont('dejavusans', '', 9);
        $this->pdf->Write(0, $this->empfanger[2]);
        $this->pdf->ln();
        $this->pdf->SetFont('dejavusans', '', 9);
        $this->pdf->Write(0, $this->empfanger[3]);
        $this->pdf->ln();
        $this->pdf->SetFont('dejavusans', '', 9);
        $this->pdf->Write(0, $this->empfanger[4]);
    }

    public function genReHeaderText() {
        $this->pdf->setXY(22,105);
        $this->pdf->SetFont('dejavusans', 'B', 16);
        $this->pdf->Write(0, 'Rechnung');
        $this->pdf->ln();
        $this->pdf->SetFont('dejavusans', '', 9);
        $this->pdf->Write(0, 'Rechnungsnummer:');
        $this->pdf->setX(60);
        $this->pdf->Write(0, 'VB2022/000001');
        $this->pdf->ln();

        $this->pdf->Write(0, 'Kundennummer:');
        $this->pdf->setX(60);
        $this->pdf->Write(0, '10002');
        $this->pdf->ln();

        $this->pdf->Write(0, 'Rechnungsdatum:');
        $this->pdf->setX(60);
        $this->pdf->Write(0, '01.02.2022');
        $this->pdf->ln();
    }

    public function genTableHeader() {
        $this->pdf->setY(135);
        $this->pdf->SetFillColor(44, 62, 80);
        $this->pdf->SetTextColor(255);
        $this->pdf->Cell(8, 6, 'Pos', 1, 0, 'L', 1);
        $this->pdf->Cell(80, 6, 'Bezeichnung', 1, 0, 'L', 1);
        $this->pdf->Cell(13, 6, 'Menge', 1, 0, 'L', 1);
        $this->pdf->Cell(15, 6, 'Einheit', 1, 0, 'L', 1);
        $this->pdf->Cell(25, 6, 'Einzelpreis', 1, 0, 'L', 1);
        $this->pdf->Cell(25, 6, 'Gesamtpreis', 1, 0, 'L', 1);
        $this->pdf->ln();
    }

    public function addPositions() {


        foreach ($this->pos AS $pos) {

            if($this->pdf->getY() > 220) {
                $this->pdf->ln();
                $this->pdf->ln();
                $this->pdf->SetFont('dejavusans', 'BI', 8);
                $this->pdf->Write(0, 'Bitte beachten Sie, dass die Rechnung auf der nächsten Seite fortgesetzt wird.');
                $this->createHeader();
                $this->genReHeaderText();
                $this->genTableHeader();
            }

            $this->pdf->SetFillColor(44, 62, 80);
            $this->pdf->SetTextColor(44, 62, 80);

            $this->pdf->SetX(30);
            $y = $this->pdf->getY();
            $this->pdf->MultiCell(80, 6, $pos[1], 1, 'L', 0, 0);
            $this->pdf->ln();
            $height = $this->pdf->getY() - $y;


            $this->pdf->SetXY(22, $y);
            $this->pdf->MultiCell(8, $height, $pos[0], 1, 'C', 0, 0);

            $this->pdf->SetXY(110, $y);
            $this->pdf->MultiCell(13, $height, $pos[2], 1, 'C', 0, 0);
            $this->pdf->MultiCell(15, $height, $pos[3], 1, 'C', 0, 0);
            $this->pdf->MultiCell(25, $height, $this->numfor($pos[4]), 1, 'R', 0, 0);
            $this->pdf->MultiCell(25, $height, $this->numfor($pos[5]), 1, 'R', 0, 0);

            $this->pdf->ln();
        }

        $y =  $this->pdf->getY()+2;
        $style = array('color' => array(44, 62, 80));
        $this->pdf->Line(22, $y, 188,$y, $style);
        $this->pdf->setY($y+2);
        $this->pdf->SetFont('dejavusans', 'B', 8);
        $this->pdf->MultiCell(141, 5, 'Total (EUR / €) exkl. MwSt.', 0, 'L', 0, 0);
        $this->pdf->MultiCell(25, 5, $this->numfor(5000), 0, 'R', 0, 0);
        $this->pdf->ln();
        $this->pdf->SetFont('dejavusans', '', 8);
        $this->pdf->MultiCell(141, 5, '19% von ', 0, 'L', 0, 0);
        $this->pdf->MultiCell(25, 5, $this->numfor(5000), 0, 'R', 0, 0);

        $y =  $this->pdf->getY()+6;
        $this->pdf->Line(22, $y, 188,$y, $style);
        $this->pdf->setY($y+3);

        $this->pdf->SetFont('dejavusans', 'B', 9);
        $this->pdf->MultiCell(141, 5, 'Total (EUR / €) inkl. MwSt.', 0, 'L', 0, 0);
        $this->pdf->MultiCell(25, 5, $this->numfor(5000), 0, 'R', 0, 0);


    }

    private function numfor($num) {
        return number_format($num,2,","," ");
    }

    public function generate() {
        $this->createHeader();
        $this->genReHeaderText();
        $this->genTableHeader();
        $this->addPositions();
    }

    public function output() {
        $this->pdf->output();
    }

}

// initiate PDF
//$pdf = new \setasign\Fpdi\Tcpdf\Fpdi(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false, true);;
//$pdf->AddPage();
//$pdf->Output();