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

namespace Kufer\Web\KuferTools\Basis\TeilnehmerInfo\TeilnehmerDetails;

use Kufer\Web\KuferTools\Utils\TeilnehmerHandler\TeilnehmerInserter as TeilnehmerInserter;

abstract class TeilnehmerDetailsPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  protected function getViewModel()
  {
    $allgSettings = \AllgSettingsAPI::getAllgSettings();

    $viewModel = new TeilnehmerDetailsViewModel();
    $viewModel->teilnehmer = $this->useCaseResponse->teilnehmer;
    $viewModel->teilnehmer->nextTnr = $this->useCaseResponse->nextTnr;
    $viewModel->teilnehmer->previousTnr = $this->useCaseResponse->previousTnr;
    $viewModel->teilnehmer->backLink = $this->useCaseResponse->backLink;
    $viewModel->teilnehmer->backButtonLabel = $this->useCaseResponse->backButtonLabel;
    $viewModel->teilnehmer->ueberschrift = $this->useCaseResponse->ueberschrift;

    $viewModel->newTnMsgSuccess = $this->getNewTnMsgSuccess($allgSettings);
    $viewModel->newTnMsgInfo = $this->getNewTnMsgInfo($allgSettings);
    $viewModel->newTnMsgFehler = $this->getNewTnMsgFehler($allgSettings);

    $viewModel->teilnehmer->reiterButtons = $this->getButtonHtml();
    $viewModel->teilnehmer->toolId = $this->useCaseResponse->toolId;
    
    $viewModel->reiterHtml = $this->getReiter();

    return $viewModel;
  }

  
  abstract protected function getNewObjectReiterView($viewModel);

  private function getReiter()
  {
    $viewModel = new ReiterViewModel();
    $viewModel->teilnehmer = $this->useCaseResponse->teilnehmer;
    $reiterAry = $this->useCaseResponse->reiter;
    foreach ($reiterAry as $reiter) {
      $reiter->tnr = $reiter->tnr != '' ? '&tnr=' . $reiter->tnr : '';
      $reiter->tguid = !is_null($reiter->tguid ?? null) ? '&tguid=' . (string)$reiter->tguid : '';
    }
    $viewModel->reiter = $reiterAry;
    $view = $this->getNewObjectReiterView($viewModel);

    return $view->show();
  }

  
  private function getNewTnMsgSuccess($allgSettings)
  {
    if ($this->useCaseResponse->newTnStatusCode == TeilnehmerInserter::SUCCESS_TEILNEHMERDATEN_ERFOLGREICH_UEBERMITTELT) {
      return $allgSettings->successMsgTeilnehmerNeu;
    }

    return '';
  }

  
  private function getNewTnMsgInfo($allgSettings)
  {
    if ($this->useCaseResponse->newTnStatusCode == TeilnehmerInserter::INFO_TEILNEHMERDATEN_NICHT_VERAENDERT) {
      return $allgSettings->failMsgChangeTeilnehmer;
    }

    return '';
  }

  
  private function getNewTnMsgFehler($allgSettings)
  {
    if ($this->useCaseResponse->newTnStatusCode == TeilnehmerInserter::ERROR_UEBERTRAGUNG_FEHLGESCHLAGEN) {
      return 'Fehler: ' . $allgSettings->failSubmitMsgTeilnehmer;
    }
    if ($this->useCaseResponse->newTnStatusCode == TeilnehmerInserter::ERROR_TEILNEHMER_NICHT_ANGELEGT) {
      return 'Fehler: ' . $allgSettings->failMsgTeilnehmerNeu;
    }
    if ($this->useCaseResponse->newTnStatusCode == TeilnehmerInserter::ERROR_TEILNEHMERDATEN_NICHT_AKTUELL) {
      return 'Fehler: ' . $allgSettings->failSubmitMsgConflict;
    }
    if ($this->useCaseResponse->newTnStatusCode == TeilnehmerInserter::ERROR_DOPPELT_AUFGERUFEN) {
      return $allgSettings->failMsgAlreadySubmitted;
    }
    if ($this->useCaseResponse->newTnStatusCode == TeilnehmerInserter::ERROR_TEILNEHMERDATEN_FEHLERHAFT) {
      return \Kufer\Web\KuferTools\Utils\WssHandler::getErrorMessage($this->useCaseResponse->newTnWrongFields);
    }

    return '';
  }

  
  protected function getJSDeclarations(): string
  {
    $result = parent::getJSDeclarations();
    $result .= \JsOperations::getDeclarationString('KuferTools.Tnr', $this->useCaseResponse->teilnehmer->id);
    $result .= \JsOperations::getDeclarationString('KuferTools.Tguid', empty($this->useCaseResponse->teilnehmer->guid) ? '' : (string)$this->useCaseResponse->teilnehmer->guid);
    
    $result .= \JsOperations::getDeclarationString('KuferTools.OeffneReiter', $this->useCaseResponse->oeffneReiter);
    $result .= \JsOperations::getDeclarationString('KuferTools.ActionMerkeReiter', 'merkeTeilnehmerDetailsReiter');
    $result .= 'registerNamespace("KuferTools.KursDetails");' . "\n";
    $result .= 'registerNamespace("KuferTools.PersonDetails"); ' . "\n";

    return $result;
  }

  
  protected function getJsFilesSrcAryWeitere(): array
  {
    return array(
      $this->getJsFileFromSys('collapse.js'),
      $this->getJsFileFromSys('detailsseite.js'),
      $this->getJsFileFromJQuery('galleria/galleria.min.js', \CodingOperations::getEncoding4ExternalKuferToolsJsFiles()),
      $this->getJsFileFromOldTools('pdfdruck.js'),
      $this->getJsFileFromSys('pdfdruck.js'),
      $this->getJsFileFromSys('filter.js'),
      $this->getJsFileFromSys('datatables.js'),
      $this->getJsFileFromSys('kursdozenten.js'),
      $this->getJsFileFromSys('mnlisten.js'),
      $this->getJsFileFromSys('tninfo.js')
    );
  }

  protected function getCssFilesSrcAry(): array
  {
    return array_merge(
      parent::getCssFilesSrcAry(),
      array(
        $this->getCssLinkFromSys('collapse.css'),
        $this->getCssLinkFromSys('detailsseite.css')
      )
    );
  }

  protected function getButtonHtml()
  {
    $buttonleiste = new \Kufer\Web\KuferTools\Basis\Button\Buttonleiste();

    return $buttonleiste->getHtmlButtonleiste($this->useCaseResponse->reiterButtons, 'kursdetails_buttons');
  }

  protected function getSeitenTitel(): string
  {
    return $this->useCaseResponse->ueberschrift;
  }
}