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

namespace Kufer\KuferTools\Utils\Ummelden;

use Kufer\KuferTools\Utils\HindernisGruende\HindernisGruende as HindernisGruende;

class UmmeldenEmail extends Ummelden
{
  private $ummeldenStatus;
  private $sprachSettings;

  public function __construct($toolId, $ummeldenStatus = null)
  {
    parent::__construct($toolId);
    if (is_null($ummeldenStatus)) {
      $ummeldenStatus = new UmmeldenStatus();
    }
    $this->ummeldenStatus = $ummeldenStatus;
    $this->sprachSettings = \SettingsFactory::getSettings('SprachSettingsObject');
  }

  public function ummelden($belegungsArray, $zielKursNr)
  {
    $this->doUmmeldung($belegungsArray, $zielKursNr);

    return $this->getStatusMeldungFromUmmeldenResult(null, null, null);
  }

  protected function getStatusMeldungFromUmmeldenResult($ummeldenStatus, $aktuelleKursNr, $zielKursNr)
  {
    return 'Es wurde eine E-Mail mit den gewünschten Ummeldungen an die Einrichtung versendet.';
  }

  protected function doUmmeldung($belegungsArray, $zielKursNr)
  {
    if (count($belegungsArray) > 0) {
      $zielKurs = $this->getKurs($zielKursNr);
      $sender = \Kufer\Mail\Sender\EMailSenderFactory::create();
      $senderRecipient = new \Kufer\Mail\Sender\Settings\Recipient\Einrichtung\EMailEinrichtungRecipientToolsKursSettings($zielKurs);
      $senderRecipient
        ->setSettingMailToVerwaltendenMitarbeiter($this->toolSettings->meldeBenachrichtigungsMailAnVerwMa)
        ->setSettingsVhsEMail($this->toolSettings->vhsEmailTool8Section242);

      $mailSubject = 'Kurs Ummelden';
      $body = $this->getBody($belegungsArray, $zielKursNr);
      $email = new \Kufer\Mail\EMail\EMailPlaintext($mailSubject, $body);

      $sender->sendFromToolsUserToEinrichtung($email, \SessionOperations::getCurrentWebToolsUser(), $senderRecipient);
    }
  }

  protected function getHindernisGruende($belegung, $zielKursNr)
  {
    $hindernisGruendeHelper = new \Kufer\KuferTools\Utils\HindernisGruende\HindernisGruende();

    return $hindernisGruendeHelper->getHindernisGruende($belegung, $zielKursNr);
  }

  protected function getHindernisGruendeAlert($zielKursNr, $aktuelleKnr, $belegungsArray)
  {
    $text = 'Für folgende Teilnehmer wurde ein Ummeldewunsch nach Kurs ' . \CleanOperations::cleanStringForHtml($zielKursNr) . ' per E-Mail an die Einrichtung versendet: ' . BR;
    $text .= $this->getNameVornameListeFromBelegungsArray($belegungsArray);

    return \HTMLOperations::getBootstrapAlert('info', $text);
  }

  private function getBody($belegungsArray, $zielKursNr)
  {
    $body = '';
    $fromKurs = $this->getKurs($belegungsArray[0]->knr);
    $toKurs = $this->getKurs($zielKursNr);
    $vonPart = ' von ' . $this->sprachSettings->Kurs['Singular']['Dativ'] . ' "' . $fromKurs->getVarValue('kurzbez_titel') . '"' . '(' . $belegungsArray[0]->knr . ')';
    
    
    if ($this->toolSettings->meldeImmerBenachrichtigungsMail && count($this->ummeldenStatus->successStatus) > 0) {
      $body .= 'Für folgende ' . $this->getAnspracheForTn($belegungsArray) . ' wurde eine Ummeldung' . $vonPart . ' nach '
              . $this->sprachSettings->Kurs['Singular']['Dativ'] . ' "' . $toKurs->getVarValue('kurzbez_titel') . "\" ($zielKursNr)" . ' erfolgreich durchgeführt:' . "\n";
      $body .= $this->getTextForUmgemeldeteTeilnehmer($this->ummeldenStatus->successStatus, $zielKursNr);
      $body .= "\n";
    } else {
      
      $body .= 'Für folgende ' . $this->getAnspracheForTn($belegungsArray) . ' ist eine Ummeldung' . $vonPart . ' nach '
            . $this->sprachSettings->Kurs['Singular']['Dativ'] . ' "' . $toKurs->getVarValue('kurzbez_titel') . "\" ($zielKursNr)" . ' durchzuführen:' . "\n";
      $notSuccessfulStatus = array_merge($this->ummeldenStatus->errorStatus, $this->ummeldenStatus->hindernisGruende);

      $body .= $this->getTextForUmgemeldeteTeilnehmer($notSuccessfulStatus, $zielKursNr);
    }

    $body .= 'Diese Nachricht wurde automatisch von den KuferTools generiert.';

    return $body;
  }

  private function getAnspracheForTn($belegungsArray)
  {
    if (count($belegungsArray) > 1) {
      return $this->sprachSettings->Teilnehmer['Plural']['Akkusativ'];
    } else {
      return $this->sprachSettings->Teilnehmer['Singular']['Akkusativ'];
    }
  }

  private function getTextForUmgemeldeteTeilnehmer($belegungsArray, $zielKursNr)
  {
    $text = '';
    foreach ($belegungsArray as $belegung) {
      $hindernisgruende = $this->getHindernisGruende($belegung, $zielKursNr);
      $text .= "\t" . $belegung->teilnehmer->name_vorname . '(' . $belegung->teilnehmer->id . ')';
      if (in_array(HindernisGruende::ZAHLUNG_BEREITS_ERFOLGT, $hindernisgruende)) {
        $text .= "\r\n\t\t" . 'Zahlung liegt vor';
      }
      if (isset($belegung->austritt)) {
        $austritt = $belegung->austritt !== '' ? $belegung->austritt : \DateTimeOperations::getDateNow();
        $text .= "\r\n\t\t" . 'Austritt aus dem alten Kurs zum: ' . $austritt;
      }
      if (isset($belegung->eintritt) && $belegung->eintritt != '') {
        $text .= "\r\n\t\t" . 'Eintritt in den neuen Kurs zum: ' . $belegung->eintritt;
      }
      $text .= "\r\n\r\n";
    }

    return $text;
  }

  private function getKurs($knr)
  {
    $dbwKurse = new \DBWorkKurseWT();

    return $dbwKurse->getKurs($knr);
  }
}