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

namespace Kufer\Web\KuferTools\Firma\KursUebersicht\Detailsreiter\Teilnehmer;

class TeilnehmerPresenter extends \Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Teilnehmer\TeilnehmerPresenter
{
  protected function getView()
  {
    return new TeilnehmerReiterView($this->getViewModel());
  }

  protected function createNewViewModel(): \Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Teilnehmer\TeilnehmerReiterViewModel
  {
    return new TeilnehmerReiterViewModel();
  }

  protected function getViewModel()
  {
    $this->useCaseResponse->kurs = $this->useCaseResponse->belegung->getKurs();
    $viewModel = parent::getViewModel();
    if (!is_null($this->useCaseResponse->changedBelegungen)) {
      $viewModel->kurs->statusMsg = $this->getStatusMeldungen4Storno($this->useCaseResponse->changedBelegungen);
    } elseif (!is_null($this->useCaseResponse->statusMessage)) {
      $viewModel->kurs->statusMsg = $this->useCaseResponse->statusMessage;
    }

    $viewModel->belegung = $this->useCaseResponse->belegung;

    return $viewModel;
  }

  private function getStatusMeldungen4Storno($changedBelegungsArry)
  {
    $msg = '';
    if (isset($changedBelegungsArry['successBelgungenDirektOrDMZ']) && count($changedBelegungsArry['successBelgungenDirektOrDMZ']) > 0) {
      $msg .= $this->getSuccessMessage4Storno($changedBelegungsArry['successBelgungenDirektOrDMZ']);
    }
    if (isset($changedBelegungsArry['successEmail']) && count($changedBelegungsArry['successEmail']) > 0) {
      $msg .= $this->getEMailInfoMessage4Storno($changedBelegungsArry['successEmail'], $this->useCaseResponse->sprachSettings);
    }
    if (isset($changedBelegungsArry['error']) && count($changedBelegungsArry['error']) > 0) {
      $msg .= $this->getErrorMessage4Storno($changedBelegungsArry['error']);
    }
    if (isset($changedBelegungsArry['successBelegungenBarzahlung']) && count($changedBelegungsArry['successBelegungenBarzahlung']) > 0) {
      $msg .= $this->getSuccessMessage($changedBelegungsArry['successBelegungenBarzahlung'], 'barzahlung');
    }
    if (isset($changedBelegungsArry['errorBelegungenBarzahlung']) && count($changedBelegungsArry['errorBelegungenBarzahlung']) > 0) {
      $msg .= $this->getErrorMessage($changedBelegungsArry['errorBelegungenBarzahlung'], 'barzahlung');
    }

    return $msg;
  }

  
  private function getSuccessMessage4Storno($pBelegungAry)
  {
    $kursList = '';
    foreach ($pBelegungAry as $belegung) {
      $kursList .= '<div>' . \CleanOperations::cleanStringForHtml($belegung->teilnehmer->namevorname) . '</div>';
    }
    $meldung = 'Für folgende Teilnehmer wurde erfolgreich eine Stornierung durchgeführt:';

    return \HTMLOperations::getSuccessBox('<div class="successbox_text"><div>' . $meldung . '</div>' . BR_WT . $kursList . '</div>', '', 'alert alert-success');
  }

  
  private function getEMailInfoMessage4Storno($pBelegungAry, $pSprachsettings)
  {
    $kursList = '';
    
    foreach ($pBelegungAry as $belegung) {
      $kursList .= '<div>' . \CleanOperations::cleanStringForHtml($belegung->teilnehmer->namevorname) . '</div>';
      $hinderungsGruendeAry = \StornoAPI::getHinderungsGruende($belegung);
      if (count($hinderungsGruendeAry) > 0) {
        $kursList .= '<ul>';
        foreach ($hinderungsGruendeAry as $grund) {
          if ($grund == \StornoAPI::HINDERUNG_STATUS_NICHT_STORNIERBAR) {
            $kursList .= '<li> - ' . \CleanOperations::cleanStringForHtml(\StornoAPI::getText4HinderungsKonstanten($grund, $belegung, $pSprachsettings))
                  . '<br />A - Angemeldet<br />'
                    . 'I - Interesse ( keine Platzreservierung )<br />'
                    . 'P - Platzreservierung ( kein Geld )<br /> '
                    . 'U - Umgemeldet<br />'
                    . 'W - Warteliste<br />'
                  . '</li>';
          } else {
            $kursList .= '<li> - ' . \CleanOperations::cleanStringForHtml(\StornoAPI::getText4HinderungsKonstanten($grund, $belegung, $pSprachsettings)) . '</li>';
          }
        }
        $kursList .= '</ul>';
      }
      $kursList .= BR_WT;
    }
    $kursList .= '<div>Eine E-Mail mit den gewünschten Abmeldungen wurde an die Einrichtung versendet.</div>';

    $meldung = 'Für folgende Teilnehmer wurde eine E-Mail mit der Stornoanfrage an die Einrichtung versendet:';

    return \HTMLOperations::getInfoBox('<div class="infobox_text"><div>' . $meldung . '</div>'
                                       . BR_WT . $kursList . '</div>', 'Stornierung per E-Mail versendet', 'alert alert-info');
  }

  
  private function getErrorMessage4Storno($pBelegungAry)
  {
    $kursList = '';
    foreach ($pBelegungAry as $belegung) {
      $kursList .= '<div>' . \CleanOperations::cleanStringForHtml($belegung->teilnehmer->namevorname) . '</div>';
    }
    $meldung = 'Folgende Teilnehmer wurden nicht storniert, da ein Fehler aufgetreten ist. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung:';

    return \HTMLOperations::getAlertBox('<div role="status" class="alertbox_text"><div>' . $meldung . '</div>' . BR_WT . $kursList . '</div>', 'Fehler beim Versenden der Stornierung', 'alert alert-danger');
  }

  
  private function getErrorMessage($pBelegungAry, $pHandleTyp)
  {
    $kursList = '';
    $meldung = '';
    $infoText = '';
    foreach ($pBelegungAry as $belegung) {
      $kursList .= '<div>' . \CleanOperations::cleanStringForHtml($belegung->teilnehmer->namevorname) . '</div>';
    }
    if ($pHandleTyp == 'barzahlung') {
      $meldung = 'Für folgende Teilnehmer wurden keine Barzahlung durchgeführt, da ein Fehler aufgetreten ist. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung:';
      $infoText = 'Fehler bei der Barzahlung';
    }

    return \HTMLOperations::getAlertBox('<div role="status" class="alertbox_text"><div>' . $meldung . '</div>' . BR_WT . $kursList . '</div>', $infoText, 'alert alert-danger');
  }

  
  private function getSuccessMessage($pBelegungAry, $pHandleTyp)
  {
    $kursList = '';
    foreach ($pBelegungAry as $belegung) {
      $kursList .= '<div>' . \CleanOperations::cleanStringForHtml($belegung->teilnehmer->namevorname) . '</div>';
    }
    $meldung = '';
    if ($pHandleTyp == 'barzahlung') {
      $meldung = 'Für folgende Teilnehmer wurden eine Barzahlung erfolgreich durchgeführt:';
    }

    return \HTMLOperations::getSuccessBox('<div class="successbox_text"><div>' . $meldung . '</div>' . BR_WT . $kursList . '</div>', '', 'alert alert-success');
  }
}

class TeilnehmerBelegungJSObject
{
  public $id;
  public $tnr;
  public $namevorname;
  public $status;

  public function __toString()
  {
    return '';
  }
}