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

namespace Kufer\Web\KuferTools\Teilnehmer\KursUebersicht\KursDetails;

class UploadBgluUseCase extends \Kufer\Web\KuferTools\Basis\UseCase\EinzelKursUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new UploadBgluResponse());
  }

  public static function getToolId()
  {
    return \ToolsAPI::TOOL_TN;
  }

  public static function getToolSectionId()
  {
    return 335;
  }

  public function action()
  {
    $this->response->antwort = $this->_handleAjaxUpload4BGLU();

    return $this->response;
  }

  protected function getAllowedIds()
  {
    $user = $this->getUser();
    $belegungshelper = new \Kufer\Web\KuferTools\Utils\DatamodulHelper\Belegungen\TeilnehmerBelegungen($this->toolSettings, $user->tnr);

    return $belegungshelper->getIdsOhneFilter();
  }

  protected function getRequestedId()
  {
    return $this->request->belegId;
  }

  private function getBelegung()
  {
    $dbwBelegung = new \DBWorkBelegung(1, true);

    return $dbwBelegung->getBelegung($this->request->belegId);
  }

  private function _handleAjaxUpload4BGLU()
  {
    $data = $this->getBelegung();

    $nachweisArt = $this->request->nachweisart;
    try {
      $emailDMZAry = array('DMZ' => '', 'EMail' => '');
      $dateinameMitPfadFormatAry = $this->getAttachementOfTn();

      if (!empty($dateinameMitPfadFormatAry)) {
        $dateinameMitPfadFormat = $dateinameMitPfadFormatAry->name;
        $dateiname = basename($dateinameMitPfadFormat, '"\\"');
        $datDocAry = $this->getNachweisDatDocAry($data, $dateiname, $nachweisArt);

        $dateiAnDmzSenden = \DatDocAPI::sendDokumente2DMZ($datDocAry, $dateinameMitPfadFormat);
        $emailDMZAry['DMZ'] = $dateiAnDmzSenden;

        if ($emailDMZAry['DMZ'] === 'nichtAktiviert') {
          \Logger::logg('Tool Teilnehmer: Fehlermeldung für das Senden der Datei an DMZ: Die Datei wurde nicht hochgeladen.');
        }

        if ($emailDMZAry['DMZ'] !== 'nichtAktiviert') {
          $emailVersenden = $this->emailInhaltMitAnhangNachUploadedFile($data->kurs, $dateinameMitPfadFormat, $nachweisArt);
          $emailDMZAry['EMail'] = $emailVersenden;
        } else {
          \Logger::logg('Tool Teilnehmer: Fehlermeldung für das Senden der E-Mail an Einrichtung: Die E-Mail wurde nicht versendet.');
        }
      } else {
        \Logger::logg('Fehlermeldung für das Hochladen der Datei: Die Datei wurde nicht hochgeladen.');
      }
    } catch (\Exception $ex) {
      \Logger::logg('Tool Teilnehmer Upload von Dateien Fehler: ' . $ex->getMessage(), 100);
    }

    return $emailDMZAry;
  }

  
  public function getAttachementOfTn()
  {
    $tool0settings = \ToolSettingsAPI::getToolSettings(0);
    
    $uploadPath = \UploadUserAPI::getUploadPath4User($tool0settings->uploadpath, $this->getUser());

    
    $userBasedUploadStrategy = new \UserBasedUploadFileStrategy();

    $doUploadAttachment = \UploadOperations::doUpload(
      'uploadfileBlak',
      $uploadPath,
      1,
      $tool0settings->uploadmaxsize,
      $userBasedUploadStrategy,
      '',
      true
    );

    if (empty($doUploadAttachment)) {
      throw new \Exception('Es wurde keine Datei hochgeladen.');
    }
    if ($doUploadAttachment[0]->errorMsg !== '') {
      throw new \Exception($doUploadAttachment[0]->errorMsg);
    }

    return $doUploadAttachment[0];
  }

  
  private function getNachweisDatDocAry($pData, $pDateinameMitPfadFormat, $pNachweisart)
  {
    
    $datDoc = new \Dat_doc();
    $datDoc->knr = $pData->knr; 
    $datDoc->datum = \DateTimeOperations::getDateNow();
    $datDoc->lfdnr = ''; 
    $datDoc->nr = $pData->tnr; 
    $datDoc->typ = $pData->teilnehmer->typ; 

    $tool0settings = \ToolSettingsAPI::getToolSettings(0);
    $datDoc->pfaddok = \UploadUserAPI::getUploadPath4User($tool0settings->uploadpath, $this->getUser());
    $datDoc->pfadvorlage = $datDoc->pfaddok;
    $datDoc->datnamdok = basename($pDateinameMitPfadFormat, '"\\"');
    $datDoc->datnamvorlage = $datDoc->datnamdok;
    $datDoc->name = $datDoc->datnamdok; 
    $datDoc->versandtam = \DateTimeOperations::getDateTimeNow();
    $datDoc->versandtvom = $pData->teilnehmer->name;
    $datDoc->beschreibung = \DatDocAPI::getNachweisartBGLUKurs($pNachweisart);
    $datDoc->nachweis = 'W';
    $datDocAry = array();
    $datDocAry[] = $datDoc;

    return $datDocAry;
  }

  
  private function emailInhaltMitAnhangNachUploadedFile($pKurs, $pDateinameMitPfadFormat, $pNachweisart)
  {
    $dateiBezeichnung = \DatDocAPI::getNachweisartBGLUKurs($pNachweisart);
    $teilnehmer = \SessionOperations::getCurrentWebToolsTeilnehmer();
    $subject = 'KuferTools: Teilnehmer ' . $teilnehmer->getVarValue('name_vorname_ohne_komma') . ' hat ein Dokument zum Kurs ' . $pKurs->nr_anzeige . ' hochgeladen';
    if ($teilnehmer->geschlecht == 'W') {
      $tnBezeichnung = 'Die Teilnehmerin';
      $tnBezeichnung2 = 'bei der Teilnehmerin';
    } else {
      $tnBezeichnung = 'Der Teilnehmer';
      $tnBezeichnung2 = 'beim Teilnehmer';
    }


    $emailTextHtml = '<div>' . \CleanOperations::cleanStringForHtml($tnBezeichnung) . ' ' . \CleanOperations::cleanStringForHtml($teilnehmer->getVarValue('name_vorname_ohne_komma')) . ' hat ein Dokument zum Kurs "' . \CleanOperations::cleanStringForHtml($pKurs->kurzbez) . '" (' . \CleanOperations::cleanStringForHtml($pKurs->nr_anzeige) . ') hochgeladen.</div>';
    $emailTextHtml .= '<div>Sie finden das Dokument "' . \CleanOperations::cleanStringForHtml($dateiBezeichnung) . '" im Anhang dieser E-Mail. Außerdem wurde das Dokument in KuferSQL ' . \CleanOperations::cleanStringForHtml($tnBezeichnung2) . ' hinterlegt, und kann im Teilnehmerstamm unter "Dokumente" eingesehen werden.</div>';

    try {
      $email = new \Kufer\Mail\EMail\EMailHTML($subject, $emailTextHtml, array(new \Kufer\Mail\Attachment\EMailAttachmentFile($pDateinameMitPfadFormat)));
      $email->addKuferToolsFooter('Dokument hochladen', $this->getUser(), $pKurs);

      $sender = \Kufer\Mail\Sender\EMailSenderFactory::createForToolsWithCustomAddress($this->toolSettings->vhsEmailTool20Section335_bgluKurs);

      return $sender->sendFromTeilnehmerToEinrichtung($email, $teilnehmer)->hasSentAnyMails();
    } catch (\Exception $ex) {
      \Logger::logg('Fehler beim Senden der E-Mail mit einem Dokument im Anhang: ' . $ex->getMessage(), 100);

      return false;
    }
  }
}

class UploadBgluRequest
{
  public $belegId;
  public $nachweisart;
}

class UploadBgluResponse extends \Kufer\Web\KuferTools\Basis\UseCase\ToolResponse
{
}