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

namespace Kufer\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\VertragAkzeptieren;
use Kufer\KuferTools\Dozent\KursUebersicht\Detailsreiter\Honorar\Utils\VertraegeUtils as VertraegeUtils;

class VertragAkzeptierenUseCase extends \Kufer\KuferTools\Dozent\KursUebersicht\EinzelKursUseCase
{
  const SUCCESS_VERTRAG_ERFOLGREICH_AKZEPTIERT = 'vertragErfolgreichAkzeptiert';
  const SUCCESS_VERTRAG_BEREITS_AKZEPTIERT = 'vertragBereitsAkzeptiert';
  const ERROR_ALLGEMEINER_FEHLER = 'allgemeinerFehler';
  
  public function __construct($request)
  {
    parent::__construct($request, new VertragAkzeptierenResponse);
  }
  
  public static function getToolId()
  {
    return TOOL_KURSUEBERSICHT_DOZ;
  }
  
  public static function getToolSectionId()
  {
    return 320;
  }
  
  public function hasAccess($pToolSectionId = NULL)
  {
    if(!parent::hasAccess()) {
      return false;
    }
    if(!$this->isRechtAllowed('334.1.5')) {
      return false;
    }
    if(!\DBWorkBASysSettings::isMVHS()) {
      return false;
    }
    if(!VertraegeUtils::vertragsDruckAllowed($this->request->knr)) {
      return false;
    }
    return true;
  }
  
  public function action()
  {
    $statusCode = $this->akzeptiereVertrag();
    return $this->getResponse($statusCode);
  }
  
  protected function getResponse($statusCode)
  {
    $this->response->statusCode = $statusCode;
    $this->response->knr = $this->request->knr;
    return $this->response;
  }
  
  private function akzeptiereVertrag()
  {
    try {
      if(VertraegeUtils::vertragBereitsAkzeptiert($this->request->knr)) {
        return self::SUCCESS_VERTRAG_BEREITS_AKZEPTIERT;
      }
      $dozKurs = VertraegeUtils::getDozVertragFromDmz($this->request->knr);
      \DozKursAPI::akzeptiereVertrag($dozKurs);
    }
    catch (\Exception $e) {
      return self::ERROR_ALLGEMEINER_FEHLER;
    }
    $this->sendMails();
    return self::SUCCESS_VERTRAG_ERFOLGREICH_AKZEPTIERT;
  }
  
  
  private function sendMails()
  {
    $user = $this->getUser();
    $mailAnMaAry = array('VerwMa' => $this->toolSettings->stornoBenachrichtigungsMailAnVerwMa, 
                         'PlanMa' => $this->toolSettings->stornoBenachrichtigungsMailAnPlanMa);
    $kurs = $this->getKursCached($this->request->knr);
    $pageIdReiterSeite = 334; 
    $mailAdressAry = \ToolsAPI::getEmailAdressForKursMA($kurs, $this->getToolId(), $pageIdReiterSeite, $mailAnMaAry);
    $dozent = $this->session->getCurrentWebToolsDozent();
    $senderEmailData = \ToolsAPI::getSenderEmailAddressAndName($dozent);
    
    $vertragPdf = null;
    $fileExtension = null;
    try {
      $datei = \DatDocAPI::getKursVertragFromDmz($dozent->id, $kurs->id);
      $vertragPdf = $datei->ContentBase64;
      
      $fileparts = \FSOperations::getFileParts($datei->DateiName);
      $info = 'Sie finden den Vertrag im Anhang dieser E-Mail.';
      $fileExtension = $fileparts['extension'];
    }
    catch(\Exception $e) {
      $info = 'Der Vertrag konnte aus technischen Gründen nicht im Anhang dieser E-Mail mitgesendet werden.';
      \Logger::logg("Vertrag Akzeptieren E-Mail an Mitarbeiter - Fehler beim Hochladen des Vertrags: " . $e->getMessage(), 200);
    }
    
    $result = false;
    foreach ($mailAdressAry as $mailAdress) {
      $smtp = new \smtpMailTools();
      $smtp->setVar2Value('to', $mailAdress);
      $smtp->setVar2Value('from', $senderEmailData['email']);
      $smtp->SetVar2Value('sendername', $senderEmailData['name']);
      $smtp->SetVar2Value('reply', $senderEmailData['reply']);
      $smtp->SetVar2Value('replyname', $senderEmailData['replyname']);
      $smtp->SetVar2Value('contenttype', SMTP_CONTENTTYPE_TEXT);
      $smtp->SetVar2Value('doNotSplitHTMLBody', true);
      if(!is_null($vertragPdf)) {
        $emailAttachment = new \EMailAttachment();
        $emailAttachment->filename = 'Vertrag von Dozent '.$user->name .' '. $user->vorname.' Kurs '.$kurs->id.'.' . $fileExtension;
        $emailAttachment->content = base64_decode($vertragPdf); 
        $smtp->addAttachment($emailAttachment);
      }
      
      $smtp->setVar2Value('subject', 'Vertrag akzeptiert von ' . $user->name .' '. $user->vorname . 'zum Kurs ' . $kurs->id);
      $smtp->setVar2Value('body', 'Der Dozent ' . $user->name . ', ' . $user->vorname . ' hat zum Kurs '. $kurs->kurzbez . '('.$kurs->id.') den Vertrag akzeptiert. ' . $info);
       
      if ($smtp->sendMail()) {
        $result = true;
      }
    }
    return $result;
  }
  
  private function getKursCached($knr)
  {
    static $kurs = null;
    if(is_null($kurs)) {
      $kurs = $this->getKurs($knr);
    }
    return $kurs;
  }
}

class VertragAkzeptierenRequest
{
  public $knr;
}

class VertragAkzeptierenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $statusCode;
  public $knr;
}