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

namespace Kufer\Web\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\HammelburgVhs\VertragPdf;

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

class Vertrag
{
  private $kurs;
  private $dozent;
  private $kursort;
  private $benutzer;
  private $aussenstelle;

  
  public function __construct($pKurs, $pDozent, $pKursort, $pBenutzer, $pAussenstelle)
  {
    $this->kurs = $pKurs;
    $this->dozent = $pDozent;
    $this->kursort = $pKursort;
    
    $this->benutzer = $pBenutzer;
    $this->aussenstelle = $pAussenstelle;
  }

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

    return $html2pdf->Output('vertrag_' . $this->kurs->id . '.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__), 'Vertrag.html'));

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

  private function replaceVars($html)
  {
    $pfadZuBilder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'bilder';
    $logo2Pfad = $pfadZuBilder . $this->getBild('logohammelburg', 'png');
    $logoPfad = $pfadZuBilder . $this->getBild('logovhs', 'png');
    $unterschriftPfad = $pfadZuBilder . $this->getBild('unterschrift_vhs', 'png');
    $kursObj = $this->kurs;
    $dozentObj = $this->dozent;
    $dozKurs = $this->getDozKurs($kursObj->id, $dozentObj->id);
    $kursOrt = $this->kursort;
    $benObj = $this->benutzer;
    $aussenstObj = $this->aussenstelle;
    $benStelleNameVorname = $benObj->stelle . ' ' . $benObj->name . ' ' . $benObj->vorname;

    
    $aussenstBezeichnungParts = array_filter(array($aussenstObj->bezeichner, $aussenstObj->strasse, $aussenstObj->ort), function($value) { return isset($value) && $value !== '';});
    $aussenstBezeichnung = implode(', ', $aussenstBezeichnungParts);
    $benNameAussenstParts = array_filter(array($benStelleNameVorname, $benObj->zimmer, $aussenstObj->strasse, $aussenstObj->ort), function($value) { return isset($value) && $value !== '';});
    $benNameAussenst = implode(', ', $benNameAussenstParts);

    
    $ansprechPartnerBez = '';
    if ($benObj->name != '' || $benObj->vorname != '') {
      $ansprechPartnerBez = 'Ihr Ansprechpartner';
    }
    $datum = date('d.m.Y');

    $map = array(
       
      '{%d_anrede%}' => $dozentObj->anrede,
      '{%d_titel%}' => $dozentObj->name_titel,
      '{%d_vorname%}' => $dozentObj->vorname,
      '{%d_name%}' => $dozentObj->name,
      '{%d_strasse_und_nr%}' => $dozentObj->strasse,
      '{%d_plz_ort%}' => $dozentObj->ort,
      '{%d_nation%}' => $dozentObj->nation,
      '{%d_iban%}' => $dozentObj->iban,
      '{%d_bankbez%}' => $dozentObj->bankbez,


       
      '{%k_titel%}' => $kursObj->getVarValue('kurzbez_titel'),
      '{%k_nr%}' => $kursObj->nr_anzeige,
      '{%k_semester%}' => $kursObj->semester,
      '{%k_aussenstelle%}' => $kursObj->aussenst,
      '{%k_beginn_dat%}' => $kursObj->beginn_dat,
      '{%k_ende_dat%}' => $kursObj->ende_dat,
      '{%k_dauer%}' => $kursObj->dauer,
      '{%k_stundenanz%}' => $kursObj->stundenanz,
      '{%k_beginn%}' => $kursObj->beginn,
      '{%k_ende%}' => $kursObj->ende,
      '{%k_teil_min%}' => $kursObj->getVarValue('teil_min'),
      '{%k_teil_max%}' => $kursObj->getVarValue('teil_max'),
      '{%k_kursort%}' => $kursObj->ort,
      '{%k_honfaktor%}' => $dozKurs->getVarValue('honfaktorMitKomma'),
      '{%k_honorarsatz%}' => $dozKurs->honsatz,
      '{%k_honorar_gesamt%}' => $dozKurs->getVarValue('honGesamtMitKomma'),

        
      '{%ko_ort%}' => $kursOrt->mktext,
      '{%ko_strasse%}' => $kursOrt->strasse,
      '{%ko_plzort%}' => $kursOrt->ort,
      '{%ko_raumnr%}' => $kursOrt->raumnr,

      
      '{%fb_logo%}' => $logoPfad,
      '{%fb_logo2%}' => $logo2Pfad,
      '{%fb_signatur%}' => $unterschriftPfad,
      '{%fb_datum_aktuell%}' => $datum,

      
      '{%ben_stelle%}' => $benObj->stelle,
      '{%ben_vorname%}' => $benObj->vorname,
      '{%ben_name%}' => $benObj->name,
      '{%ben_aussenst%}' => $benObj->aussenstelle,
      '{%ben_telefon%}' => $benObj->tel,
      '{%ben_fax%}' => $benObj->fax,
      '{%ben_email%}' => $benObj->email,
      '{%ben_ansprechText%}' => $ansprechPartnerBez,

      
      '{%aus_name%}' => $aussenstObj->bezeichner,
      '{%aus_oeffnzeit%}' => $aussenstObj->oeffnungszeiten,

      
      '{%aus_name_strasse_ort%}' => $aussenstBezeichnung,
      '{%ben_name_aussenst%}' => $benNameAussenst
    );

    $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 getDozKurs($pKnr, $pDozId)
  {
    $dbworkDozKurs = new \DBWorkDozentenHonorar(1, true);

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