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

include_once '../classes/constants.php';
if (!session_id()) {
  session_start();
}
$authenticated = SessionOperations::getVarValueIntern('admin_authenticated', false);
if (!$authenticated) {
  die('Um diese Funktion zu nutzen, muss man im Admin eingeloggt sein.');
}

class AdminBest
{
  public static $templateDir = BASEDIR . 'admin' . DIRECTORY_SEPARATOR . 'layout' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'best' . DIRECTORY_SEPARATOR;

  
  private $generator;

  private $hauptTn;
  private $weitere = array();
  private $anmart = '';
  private $kurseByStatus;
  private $status = 1;

  public function setGenerator()
  {
    $toolsettings = ToolSettingsAPI::getToolSettings(4);
    
    $altneu = $toolsettings->neuesanmeldeverfahren ? 'Neu' : 'Alt';
    $emailbrowser = PostOperations::getVarValue('art', 'Email') === 'Email' ? 'Email' : 'Browser';
    $classname = "Bestaetigung{$emailbrowser}{$altneu}";
    $this->generator = new $classname();
  }

  public function getTnAusXml($xmldaten, $offset = 0): Teilnehmer
  {
    $tn = new Teilnehmer();
    foreach ($xmldaten as $schluessel => $wert) {
      $lower = strtolower(substr($schluessel, $offset));

      if ($tn->VarExist($lower)) {
        $tn->setValue2Var($lower, \StringOperations::utf8_decode($wert));
      } else {
        $varNameMapping = array('gebdatum' => 'gebdat', 'telefon' => 'tel');
        if (isset($varNameMapping[$lower])) {
          $tn->setValue2Var($varNameMapping[$lower], \StringOperations::utf8_decode($wert));
        }
      }
    }

    return $tn;
  }

  private function setDatenAusXML($pDaten)
  {
    $this->hauptTn = $this->getTnAusXml(get_object_vars($pDaten->ANMELDUNG->STAMMDATEN));
    $kursnummernAusXML = $pDaten->xpath('/ANMELDUNGEN/ANMELDUNG/KURSE/KURS/KURSNUMMER');

    $kursnummern = array();
    foreach ($kursnummernAusXML as $kursnummer) {
      $kursnummern[] = $kursnummer->__toString();
    }

    if (isset($pDaten->ANMELDUNG->KURSE->KURS[0]->WEITEREANM->WEITERANM)) {
      $weitererCount = $pDaten->ANMELDUNG->KURSE->KURS[0]->WEITEREANM->WEITERANM->count();
      for ($i = 0; $i < $weitererCount; $i++) {
        $this->anmart = get_object_vars($pDaten->ANMELDUNG->KURSE->KURS[0]->WEITEREANM->WEITERANM[$i]->TYP)[0];
        $this->weitere[] = $this->getTnAusXml(get_object_vars($pDaten->ANMELDUNG->KURSE->KURS[0]->WEITEREANM->WEITERANM[$i]->WEITERSTAMM));
      }
    }

    $this->kurseByStatus[$this->status] = array();

    foreach ($kursnummern as $kursnummer) {
      $tmpkurs = WBKursStore::getKurs($kursnummer);

      $kursInfo = new WeitereKursInfo();
      $kursInfo->kursnummer = $kursnummer;
      $kursInfo->anzahl = 1;
      $kursInfo->kursgebuehr = MathOperations::floatToString($tmpkurs->gebuehr);
      $kursInfo->status = $tmpkurs->emailstatus;
      $kursInfo->aussenstelle = $tmpkurs->aussenst;
      $kb = new KursBuchung();
      $kb->setStatus($this->status);
      $kb->setTNBestaetigung(new TNBestASAbhaengig(false));
      $kb->setBestaetigungKopie(new ASBestaetigungKeine());
      $kb->setKursInfo($kursInfo);
      $this->kurseByStatus[$this->status][] = $kb;
    }
  }

  public function getBestaetigung(): string
  {
    $this->status = PostOperations::getVarValue('status', 1);
    $this->setDatenAusXML(simplexml_load_file(self::$templateDir . PostOperations::getVarValue('file', '')));

    $result = $this->generator->getRahmenVorher(self::$templateDir);
    $result .= $this->generator->getHtmlBestaetigung($this->hauptTn, $this->kurseByStatus, $this->weitere, $this->status, $this->anmart);
    $result .= $this->generator->getRahmenNachher(self::$templateDir);

    return $result;
  }
}

if (PostOperations::getVarValue('file', '') != '') {
  $best = new AdminBest();
  $best->setGenerator();

  
  $bestaetigungHtml = $best->getBestaetigung();

  echo $bestaetigungHtml;

  if (PostOperations::getVarValue('anmailverschicken', '') == 'on'
    && trim(PostOperations::getVarValue('andiesemailschicken', '')) != ''
    && PostOperations::getVarValue('art') == 'Email') {
    $emailwriter = new DatenEmailWriter();
    $success = $emailwriter->commit(
      trim(PostOperations::getVarValue('andiesemailschicken', '')),
      $bestaetigungHtml,
      'Testmail',
      '.xml',
      '',
      SMTP_CONTENTTYPE_HTML
    );
    if (!$success) {
      $lasterror = error_get_last();
      if (!is_null($lasterror)) {
        $errorMessage = $lasterror['message'];
        echo '<span>' . $errorMessage . '</span>';
      }
    }
  }
}

$dbwWK = new DBWorkWarenkorbKurse();
$dbwWK->clear();