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

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

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

class Vertrag
{
  private $kurs;
  private $dozent;

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

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

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

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

  private function replaceVars($html)
  {
    $pfadZuBilder = \FSOperations::path(dirname(__FILE__), 'bilder');
    $logoPfad = $pfadZuBilder . $this->getBild('logo', 'png');
    $unterschriftPfad = $pfadZuBilder . $this->getBild('unterschrift', 'png');

    $kursObj = $this->kurs;
    $dozentObj = $this->dozent;
    $dozKurs = $this->getDozKurs($kursObj->id, $dozentObj->id);

    $dbwKursTage = new \DBWorkKurseTage();
    $kurstage = $dbwKursTage->getKurstageByKursNrAndDozentNr($dozKurs->kurs, $dozentObj->getIdentifier(), array('A', 'X'));
    $kurstageAry = array_map(static function($kurstag) { return $kurstag->datum; }, $kurstage);
    $kurstageDatum0 = implode(', ', array_slice($kurstageAry, 0, 8));
    $kurstageDatum1 = implode(', ', array_slice($kurstageAry, 8));

    $benutzer = $kursObj->zusatztexte->basysbenutzer_verwaltung_ma;
    $dbwKursOrt = new \DBWorkKursorte();
    $kursort = $dbwKursOrt->getKursortbymktext($kursObj->ort);

    $datum = date('d.m.Y');

    $map = array(
      '{%ben_kennz%}' => $benutzer->kennung,
      '{%ben_tel%}' => $benutzer->tel,
      '{%ben_email%}' => $benutzer->email,

      '{%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_zusatz%}' => $dozentObj->zusatz,
      '{%d_tel%}' => $dozentObj->tel_anzeige,
      '{%d_mobil%}' => $dozentObj->mobil_anzeige,
      '{%d_email%}' => $dozentObj->email_anzeige,
      '{%d_fax%}' => $dozentObj->fax_anzeige,
      '{%d_nr%}' => $dozentObj->id,
      '{%d_bank%}' => $dozentObj->bankbez,
      '{%d_iban%}' => $dozentObj->iban,
      '{%d_bic%}' => $dozentObj->bic,
      '{%d_kontoinhaber%}' => $dozentObj->kontoinhaber ? 'Kontoinhaber: ' . $dozentObj->kontoinhaber : '',
      

      '{%k_titel%}' => $kursObj->kurzbez,
      '{%k_nr%}' => $kursObj->nr_anzeige,
      '{%k_semester%}' => $kursObj->semester,
      '{%k_beginn_datum_mit_wochentag%}' => $kursObj->getVarValue('beginn_dat_komplettkurz'),
      '{%k_ende_datum%}' => $kursObj->ende_dat,
      '{%k_uhrzeit_von%}' => $kursObj->beginn,
      '{%k_uhrzeit_bis%}' => $kursObj->ende,
      '{%k_dauer%}' => $kursObj->dauer,
      '{%k_abwktage%}' => $kursObj->abwktage,
      '{%k_teil_min%}' => $kursObj->getVarValue('teil_min'),
      '{%k_teil_max%}' => $kursObj->getVarValue('teil_max'),
      '{%k_material%}' => $kursObj->material,
      '{%k_info%}' => $kursObj->info, 
      '{%k_kurstage_datum0%}' => $kurstageDatum0,
      '{%k_kurstage_datum1%}' => $kurstageDatum1,


      '{%r_raumprog1%}' => $kursort->progheft1,
      '{%r_raumprog2%}' => $kursort->progheft2,
      '{%r_raumprog3%}' => $kursort->progheft3,

      '{%dk_ue%}' => $kursObj->stundenanz, 
      
      '{%dk_honsatz%}' => $dozKurs->honsatz,
      '{%dk_honorar%}' => $dozKurs->getVarValue('honGesamtMitKomma'),
      '{%dk_fahrtkostensatz%}' => $dozKurs->fahrtkmsatz,
       
      '{%dk_spesen%}' => $dozKurs->spesen,
      '{%dk_gesamt%}' => $dozKurs->getVarValue('gesamtMitKomma'),
      '{%dk_vertrag%}' => $dozKurs->vertragstext,

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

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