<?php
/**
 * @copyright (c) Kufer Software GmbH, Loisachstrasse 4, D-84453 Mühldorf
 */

namespace Kufer\KuferTools\Dozent\KursUebersicht\HonorarBescheinigung\HonorarBescheinigungPdf;

include_once_ex('extern/composer/vendor/autoload.php');
use Spipu\Html2Pdf\Html2Pdf;

class HonorarBescheinigung
{
  private $request;
  private $dozent;

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

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

    return $html2pdf->Output('honorarbescheinigung_' . $this->request->jahr . '.pdf');
  }

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

    return $html2pdf;
  }

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

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

  private function replaceVars($html)
  {
    $pfadZuBilder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'bilder';
    $logoHeaderPfad = $pfadZuBilder . $this->getBild('logo', 'png');
    $logoPfad = $pfadZuBilder . $this->getBild('logo2', 'png');
    $unterschriftPfad = $pfadZuBilder . $this->getBild('unterschrift', 'jpg');

    $dozentObj = $this->dozent;

    $anrede = $this->dozent->geschlecht == 'W' ? 'Frau' : 'Herr';
    $datum = date('d.m.Y');
    $datumVon = '01.01.' . $this->request->jahr;
    $datumBis = '31.12.' . $this->request->jahr;

    $summeHonorar = $this->getSummeHonorar($dozentObj);

    $map = array(
      '{%d_anrede%}' => $anrede,
      '{%d_name%}' => $dozentObj->name,
      '{%d_vorname%}' => $dozentObj->vorname,
      '{%d_strasse_und_nr%}' => $dozentObj->strasse,
      '{%d_plz_ort%}' => $dozentObj->ort,
      '{%d_honorar%}' => $summeHonorar,

      '{%fb_datum%}' => $datum,
      '{%fb_datum_von%}' => $datumVon,
      '{%fb_datum_bis%}' => $datumBis,
      '{%fb_logo_header%}' => $logoHeaderPfad,
      '{%fb_logo%}' => $logoPfad,
      '{%fb_unterschrift%}' => $unterschriftPfad
    );

    $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 getBild($pBezeichnung, $pFormat)
  {
    return DIRECTORY_SEPARATOR . $pBezeichnung . '.' . $pFormat;
  }

  
  private function getSummeHonorar($pDozentObj)
  {
    $dbwZahlung = \DBWorkZahlung::getDefaultInstance();
    $dbwZahlung->newSearch();
    $dbwZahlung->fromobject->datum = '01.01.' . $this->request->jahr;
    $dbwZahlung->toobject->datum = '31.12.' . $this->request->jahr;

    $zahlungen = $dbwZahlung->getZahlungByDoznr($pDozentObj->id);

    $summeHonorar = 0;

    foreach ($zahlungen as $zahlung) {
      switch ($zahlung->art) {
        case 1: $summeHonorar += \MathOperations::stringToFloat($zahlung->betrag);
          break;
        case 2: $summeHonorar += \MathOperations::stringToFloat($zahlung->betrag);
          break;
      }
    }

    return \MathOperations::floatToString($summeHonorar);
  }
}