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

namespace Kufer\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\HeleneWeberHaus\AuftragsbestaetigungPdf;

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

class Auftragsbestaetigung
{
  
  private $kurs;
  
  private $dozent;

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

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

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

  private function preparePdf(): Html2Pdf
  {
    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__), 'Auftragsbestaetigung.html'));

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

  private function replaceVars(string $html): string
  {
    $pfadZuBilder = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'bilder';
    $logoForumPfad = $pfadZuBilder . $this->getBild('logo_forum', 'png');
    $logoAachenPfad = $pfadZuBilder . $this->getBild('logo_aachen', 'png');
    $logoRegionAachenPfad = $pfadZuBilder . $this->getBild('logo_region_aachen', 'png');

    $kursObj = $this->kurs;
    $dozentObj = $this->dozent;

    $dbwKursorte = \DBWorkKursorte::getDefaultInstance(1, true);
    $kursortObj = $dbwKursorte->getKursortbymktext($kursObj->ort);

    $dbwDozKurs = new \DBWorkDozKurs(1, true);
    $dozKursObj = $dbwDozKurs->getDozKursInfoByKnr($kursObj->id, $dozentObj->id);

    $dbwKurstage = \DBWorkKurseTage::getDefaultInstance(1, true);
    $dbwKurstage->newSearch();
    $dbwKurstage->toobject->nodoztool = true;
    $kurstage = $dbwKurstage->getKurstagebyKursNR($kursObj->id);

    $kurstageBlock = $this->getKurstageBlock($kurstage);

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

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

      '{%k_nr%}' => $kursObj->nr_anzeige,
      '{%k_titel%}' => $kursObj->kurzbez,
      '{%k_beginn_dat_wotaglang%}' => $kursObj->getVarValue('beginn_dat_wotaglang'),
      '{%k_beginn_dat%}' => $kursObj->beginn_dat,
      '{%k_ende_dat_wotagkurz%}' => $kursObj->getVarValue('ende_dat_wotagkurz'),
      '{%k_ende_dat%}' => $kursObj->ende_dat,
      '{%k_dauer%}' => $kursObj->dauer,
      '{%k_beginn%}' => $kursObj->beginn,
      '{%k_ende%}' => $kursObj->ende,
      '{%k_stundenanz%}' => $kursObj->stundenanz,

      '{%kt_block%}' => $kurstageBlock,

      '{%ko_bez%}' => $kursortObj->bezeichnung,
      '{%ko_strasse%}' => $kursortObj->strasse,
      '{%ko_ort%}' => $kursortObj->ort,

      '{%dk_honorar%}' => $dozKursObj->getVarValue('honGesamtMitKomma'),

      '{%fb_datum_aktuell%}' => $datum,
      '{%fb_logo_aachen%}' => $logoAachenPfad,
      '{%fb_logo_region_aachen%}' => $logoRegionAachenPfad,
      '{%fb_logo_forum%}' => $logoForumPfad
    );

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

      return $string;
    }, $replacements);

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

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

  
  private function getKurstageBlock(array $pKurstage): string
  {
    $result = '';
    foreach ($pKurstage as $kurstag) {
      $result .= '<tr>';
      $result .= '<td class="beschriftung_td"></td>';
      
      
      $result .= '<td class="text_td">' . $kurstag->wotagkurz . ', ' . $kurstag->datum . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . $kurstag->zeit_beg_ende . ' Uhr</td>';
      $result .= '</tr>';
    }

    return $result;
  }
}