<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */

namespace Kufer\Web\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\Demo\HonorarPdf;

include_once_ex('extern/composer/vendor/autoload.php');

use Kufer\Web\Classes\Fileupload\FileUploadAPI;
use Spipu\Html2Pdf\Html2Pdf;

class HonorarAbrechnung
{
  private $request;
  private $kurs;
  private $dozent;

  
  public function __construct($pRequest, $pKurs, $pDozent)
  {
    $this->request = $pRequest;
    $this->kurs = $pKurs;
    $this->dozent = $pDozent;
  }

  public function output()
  {
    $html2pdf = $this->preparePdf();

    return $html2pdf->Output('honorarabrechnung_' . $this->kurs->id . '.pdf');
  }

  public function getFile()
  {
    $html2pdf = $this->preparePdf();

    return $html2pdf->Output('vertrag_' . $this->kurs->id . '.pdf', 's');
  }

  private function preparePdf()
  {
    static $html2pdf = null;
    if (is_null($html2pdf)) {
      $html2pdf = new Html2Pdf('P', 'A4', 'de');
      $html2pdf->setDefaultFont('helvetica');
      $html2pdf->writeHTML(\StringOperations::utf8_encode($this->getHtmlTemplate()));
    }

    return $html2pdf;
  }

  private function getHtmlTemplate()
  {
    $html = file_get_contents(\FSOperations::path(dirname(__FILE__), 'HonorarAbrechnung.html'));

    return $this->replaceVars($html);
  }

  private function replaceVars($html)
  {
    $kursObj = $this->kurs;
    $dozentObj = $this->dozent;
    $dozKurs = $this->getDozKurs($kursObj->id, $dozentObj->id);

    $pfadZuBilder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'bilder';
    $radioButton = $pfadZuBilder . $this->getBild('kreis', 'gif');
    $radioButtonChecked = $pfadZuBilder . $this->getBild('kreis-x', 'gif');

    $abrechnung_gesamt = $abrechnung_teil = $abrechnung_vertretung = $radioButton;
    switch ($this->request->abrechnung_art) {
      case 'gesamt':
      case 'teil':
      case 'vertretung':
        ${'abrechnung_' . $this->request->abrechnung_art} = $radioButtonChecked;
    }


    $map = array(
      '{%d_name%}' => $dozentObj->name,
      '{%d_vorname%}' => $dozentObj->vorname,
      '{%d_titel%}' => $dozentObj->name_titel,
      '{%d_strasse_und_nr%}' => $dozentObj->strasse,
      '{%d_plz_ort%}' => $dozentObj->ort,
      '{%d_nr%}' => $dozentObj->id,

      '{%d_bank%}' => $this->request->bank,
      '{%d_bic%}' => $this->request->bic,
      '{%d_iban%}' => $this->request->iban,

      '{%dk_abrechnung_gesamt%}' => $abrechnung_gesamt,
      '{%dk_abrechnung_teil%}' => $abrechnung_teil,
      '{%dk_abrechnung_vertretung%}' => $abrechnung_vertretung,

      '{%k_nr%}' => $kursObj->nr_anzeige,
      '{%k_beginn_datum_mit_wochentag%}' => $kursObj->getVarValue('beginn_dat_komplettkurz'),
      '{%k_ende_datum_mit_wochentag%}' => $kursObj->getVarValue('ende_dat_komplettkurz'),
      '{%k_titel%}' => $kursObj->getVarValue('kurzbez_titel'),
      '{%k_beginn_uhrzeit%}' => $kursObj->beginn,
      '{%k_ende_uhrzeit%}' => $kursObj->ende,

      '{%dk_honorar%}' => $dozKurs->getVarValue('honGesamtMitKomma'),
      '{%dk_fahrtkosten%}' => $dozKurs->getVarValue('fahrtGesamtMitKomma'),
      '{%dk_spesen%}' => $dozKurs->spesen,

      '{%dk_honsatz_1%}' => $this->request->honsatz_1,
      '{%dk_honsatz_2%}' => $this->request->honsatz_2,
      '{%dk_honsatz_3%}' => $this->request->honsatz_3,

      '{%dk_stdanz_1%}' => $this->request->stdanz_1,
      '{%dk_stdanz_2%}' => $this->request->stdanz_2,
      '{%dk_stdanz_3%}' => $this->request->stdanz_3,

      '{%dk_honbetrag_1%}' => $this->request->honbetrag_1,
      '{%dk_honbetrag_2%}' => $this->request->honbetrag_2,
      '{%dk_honbetrag_3%}' => $this->request->honbetrag_3,

      '{%dk_hongesamt%}' => $this->request->hongesamt,

      '{%d_bemerkung%}' => $this->request->bemerkung,
      '{%d_ergaenzung%}' => $this->request->ergaenzung,

      '{%dk_unterschrift_bild_pfad%}' => FileUploadAPI::uploadWithContents(base64_decode($this->request->signatureImage, 'img'))
    );

    $needles = array_keys($map);
    $replacements = array_values($map);
    $replacements = array_map(function($string) {return \StringOperations::htmlentities($string);}, $replacements);

    return str_replace($needles, $replacements, $html);
  }

  
  private function getDozKurs($pKnr, $pDozId)
  {
    $dbworkDozKurs = new \DBWorkDozentenHonorar(1, true);

    return $dbworkDozKurs->getHonorarbyKNRDozentNR($pKnr, $pDozId);
  }

  private function getBild($pBezeichnung, $pFormat)
  {
    return DIRECTORY_SEPARATOR . $pBezeichnung . '.' . $pFormat;
  }
}