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

namespace Kufer\KuferTools\Basis\PdfListen\TnListen\PrintTnListen;

use Kufer\KuferTools\Basis\PdfListen\DruckListenAllgemein\NachrichtAnVHSVersenden;


abstract class PrintTnListenBySettingsUseCase extends PrintTnListenUseCase
{
  
  private function _loadKurstage()
  {
    $this->listObj->settings->kurstage->von = $this->request->ktVon;
    $this->listObj->settings->kurstage->bis = $this->request->ktBis;
  }

  protected function getNachrichtAnVhsVersenden(): NachrichtAnVHSVersenden
  {
    return new \Kufer\KuferTools\Dozent\KursUebersicht\PdfListen\DruckListenAllgemein\NachrichtAnVHSVersenden();
  }

  
  public function action()
  {
    
    if (!$this->_printAllowed4User) {
      $fehlerText = ' Keine Zugriffsberechtigung auf einen Kurs oder mehrere Kurse für Liste ' . $this->request->listName . '.';
      \Logger::logg($fehlerText, 120);
    } else {
      
      
      if (!is_null($this->request->postSettings)) {
        $this->listObj->loadSettingsFromReqObj($this->request->postSettings);
      } else {
        $this->listObj->loadSettings();
      }
      $this->_loadKurstage();
    }

    $kursIds = explode(':', $this->request->id);
    $pdfListeObj = $this->_getPdfDrucklistenObj();
    $user = $this->getUser();

    if (($this->getSendInfoSuccessFromSession($kursIds) != true) && ($this->sollInfoAutomatischAnEinrichtungGesendetWerden())) {
      $nachrichtAnvhsVersenden = $this->getNachrichtAnVhsVersenden();

      $this->response->sendInfoSuccess = $nachrichtAnvhsVersenden->getSendInfoAnVHS($this->toolSettings, $pdfListeObj, $this->request->listName, $kursIds, $user);
      $this->merkeNachrichtSchonVersendet($kursIds);
    }

    return $this->getResponse();
  }

  

  
  protected function getResponse()
  {
    return parent::getResponse();
  }

  private function sollInfoAutomatischAnEinrichtungGesendetWerden()
  {
    return isset($this->toolSettings->automatischeInfoAnEinrichtungBeiListendruck) && $this->toolSettings->automatischeInfoAnEinrichtungBeiListendruck;
  }

  private function merkeNachrichtSchonVersendet($pNeueKursIds)
  {
    $alteKursIdsArray = \SessionOperations::getVarValueWTIntern('Kurseliste' . '_' . $this->request->listName, array());
    $MergeVonAlteUndNeueKursIDs = array_unique(array_merge($alteKursIdsArray, $pNeueKursIds));

    \SessionOperations::setVarValueWTIntern('Kurseliste' . '_' . $this->request->listName, $MergeVonAlteUndNeueKursIDs);
    \SessionOperations::setVarValueWTIntern('sendInfoSuccess' . '_' . $this->request->listName, $this->response->sendInfoSuccess);
  }

  private function getSendInfoSuccessFromSession($pKursIds)
  {
    $result = false;
    $kurseFromSession = (array)\SessionOperations::getVarValueWTIntern('Kurseliste' . '_' . $this->request->listName, array());
    $sendInfoSucessFromSession = \SessionOperations::getVarValueWTIntern('sendInfoSuccess' . '_' . $this->request->listName, false);

    if ($sendInfoSucessFromSession == false) {
      $result = false;
    } elseif (count(array_diff($pKursIds, $kurseFromSession)) === 0) {
      $result = true;
    }

    return $result;
  }
} 

class PrintTnListenBySettingsRequest
{
  public $id;
  public $listName;
  public $dnr;
  
  public $ktVon;
  public $ktBis;
  public $nurKurstageFilter;
  public $postSettings;
}