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

namespace Kufer\Web\KuferTools\Basis\PdfListen\DruckListenAllgemein;

use Kufer\Mail\Sender\EMailSenderFactory;

abstract class NachrichtAnVHSVersenden
{
  protected function getAlternativeEMailAddress(\ToolSettings $toolSettings): ?string
  {
    return $toolSettings->dozHatListeGeduruckt_email ?? null;
  }

  
  protected function sendInfoAnVHSMail($pToolSettings, $pBetreff, $pBody, $pUser): bool
  {
    
    $personn = \SessionOperations::getCurrentWebToolsPerson();
    $email = new \Kufer\Mail\EMail\EMailPlaintext($pBetreff, $pBody);
    $email->addKuferToolsFooter('Druck von PDF-Listen', $pUser);
    $sender = EMailSenderFactory::createForToolsWithCustomAddress($this->getAlternativeEMailAddress($pToolSettings));
    $mailResult = $sender->sendFromPersonToEinrichtung($email, $personn);

    return $mailResult->hasSentAllMails();
  }

  
  protected function sendInfoAnVHSDirekt($pProtDruckListen)
  {
    $dbwProtDruckListen = new \DBWorkProtDruckListen();
    $protDruckListen = $dbwProtDruckListen->insertProtDruckListen($pProtDruckListen);

    return $protDruckListen->id > 0;
  }

  
  protected function sendInfoAnVHSDMZ($pProtDruckListen)
  {
    $infoNode = new \XMLNode();
    $infoNode = $infoNode->getXMLNode($pProtDruckListen, 'protdrucklisten', array(), true);

    try {
      $abgleichApi = new \AbgleichAPI();
      $abgleichApi->sendeNachricht(
        \AbgleichAPI::ABGLEICH_PROTDRUCKLISTEN,
        new \Nutzlast($infoNode)
      );
    } catch (\Exception $e) {
      \Logger::logg('Anwesenheiten eintragen - folgende Exception ist aufgetreten: ' . $e->getMessage() . ' [' . $e->getTraceAsString() . ']', 200);

      return false;
    }

    return true;
  }

  abstract protected function getBenutzergruppeSingular(): string;

  
  public function getSendInfoAnVHS($pToolSettings, $pListeObj, $pListe, $pKursIds, $pUser)
  {
    $tool0Settings = \ToolSettingsAPI::getToolSettings(0);
    $listenBezeichnungAry = $pListeObj->getListAry();
    
    $listenName = \StringOperations::html_entity_decode($listenBezeichnungAry[$pListe]);

    $nameVorname = ($pUser->name_titel != '') ? $pUser->name_titel . ' ' : '';
    $nameVorname .= ($pUser->name != '') ? $pUser->name : '';
    $nameVorname .= ($pUser->vorname != '') ? ' ' . $pUser->vorname : '';

    $person = \SessionOperations::getCurrentWebToolsPerson();

    
    
    $betreff = 'KuferTools Listendruck: ' . $this->getBenutzergruppeSingular() . ' ' . $nameVorname . ' hat die PDF-Liste "' . $listenName . '" gedruckt';
    
    $inhalt = 'Zeitpunkt: ' . \DateTimeOperations::getDateTimeNow() . "\r\n";
    $inhalt .= $this->getBenutzergruppeSingular() . ': ' . $nameVorname . ' (' . $person->id . ')' . "\r\n";
    $inhalt .= 'PDF-Liste: ' . $listenName . "\r\n\r\n";
    $inhalt .= 'Für Kurse:' . "\r\n";
    $dbwkurse = new \DBWorkKurseWT(1, true);

    foreach ($pKursIds as $knr) {
      $kurs = $dbwkurse->getKurs($knr);
      $kurzbez = $kurs->kurzbez;
      str_replace("\r\n", ' ', $kurzbez);
      $inhalt .= $knr . ': ' . $kurzbez . "\r\n";
    }


    $inhalt = \StringOperations::html_entity_decode($inhalt);
    $protDruckListen = new \ProtDruckListen();
    $protDruckListen->nr = $person->id;
    $protDruckListen->typ = $person->getDbTyp();
    $protDruckListen->datum = \DateTimeOperations::getDateNow();
    $protDruckListen->listenr = 0;
    $protDruckListen->listebezeichnung = $listenName;
    $protDruckListen->mailtext = $inhalt;
    $protDruckListen->bearbeiter = $tool0Settings->direktMaKuerzel;
    $protDruckListen->bearbdatum = \DateTimeOperations::getDateTimeNow();
    $protDruckListen->erfasstvon = $tool0Settings->direktMaKuerzel;
    $protDruckListen->erfasstam = \DateTimeOperations::getDateTimeNow();

    
    
    
    if (\SessionOperations::isDMZBetrieb() && $pToolSettings->dozHatListeGedruckt_uebertragungper == HATLISTEGEDRUCKT_DMZ) {
      
      $success = $this->sendInfoAnVHSDMZ($protDruckListen);
    } elseif ((!\SessionOperations::isReplikat()) && $pToolSettings->dozHatListeGedruckt_uebertragungper == HATLISTEGEDRUCKT_DIREKT) {
      
      $success = $this->sendInfoAnVHSDirekt($protDruckListen);
    } else {
      
      
      $success = $this->sendInfoAnVHSMail($pToolSettings, $betreff, $inhalt, $pUser);
    }

    return $success;
  }
}