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

namespace Kufer\Web\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Termine;

use Kufer\Web\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Termine\TermineLoeschen\TermineLoeschenUseCase;
use Kufer\Web\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Termine\TermineSammelAenderung\HandleTermineSammelAenderung\HandleTermineSammelAenderungUseCase;

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

  protected function getViewModel()
  {
    $viewModel = parent::getViewModel();
    $allgSettings = \AllgSettingsAPI::getAllgSettings();
    $viewModel->kurs->status_erfolg = $this->getMessageStringSuccess($allgSettings);
    $viewModel->kurs->status_info = $this->getMessageStringInfo($allgSettings);
    $viewModel->kurs->status_fehler = $this->getMessageStringError($allgSettings);

    
    
    
    if (isset($this->useCaseResponse->nichtPassendeKursdaten) && count($this->useCaseResponse->nichtPassendeKursdaten) > 0
       && $this->useCaseResponse->hasRecht4KursAnpassen) {
      $viewModel->kurs->kursAnpassenDialog = $this->getKursAnpassenDialog();
    }

    $viewModel->jsdeclarations = '';
    
    if ($this->useCaseResponse->eintraegeGeloescht) {
      $viewModel->jsdeclarations = $this->getJSSelectedIds();
    }
    if ($this->useCaseResponse->termineLoeschenXsrf !== '') {
      $viewModel->jsdeclarations .= \JsOperations::getDeclarationString('KuferTools.TermineLoeschenXsrf', $this->useCaseResponse->termineLoeschenXsrf);
    }

    if ($this->useCaseResponse->showInformiereTnDialog) {
      $viewModel->kurs->informiereTnDialog = $this->getInformiereTnDialog();
    }

    return $viewModel;
  }

  
  private function getKursAnpassenDialog()
  {
    $viewModel = new \Kufer\Web\KuferTools\Basis\Termine\KursdatenAnpassenViewModel();
    $viewModel->nichtPassendeKursdaten = $this->useCaseResponse->nichtPassendeKursdaten;
    $viewModel->kurs = $this->useCaseResponse->kurs;
    $view = new KursdatenAnpassenView($viewModel);

    return $view->show();
  }

  
  private function getInformiereTnDialog()
  {
    $viewModel = new NachTerminAenderung\InformiereTnDialogViewModel();
    $viewModel->kurs = $this->useCaseResponse->kurs;
    $viewModel->action = $this->useCaseResponse->actionInformiereTnDialog;
    $viewModel->termineBearbeitet = $this->useCaseResponse->eintraegeGeaendert;
    $viewModel->termineGeloescht = $this->useCaseResponse->eintraegeGeloescht;
    $view = new NachTerminAenderung\InformiereTnDialogView($viewModel);

    return $view->show();
  }

  private function getMessageStringSuccess($pAllgSettings)
  {
    if ($this->useCaseResponse->statusCode == TermineLoeschenUseCase::SUCCESS_TERMINE_GELOESCHT) {
      return 'Die ausgewählten Termine wurden erfolgreich gelöscht.';
    } elseif ($this->useCaseResponse->statusCode == HandleTermineSammelAenderungUseCase::SUCCESS_SAMMELAENDERUNG_ERFOLGREICH) {
      return $pAllgSettings->successMsgKursplanung;
    }

    return '';
  }

  private function getMessageStringInfo($pAllgSettings)
  {
    if ($this->useCaseResponse->statusCode == HandleTermineSammelAenderungUseCase::INFO_KEINE_AENDERUNGEN_VORGENOMMEN) {
      return $pAllgSettings->failNoChangesMsgKursplanung;
    }

    return '';
  }

  private function getMessageStringError($pAllgSettings)
  {
    if ($this->useCaseResponse->statusCode == TermineLoeschenUseCase::ERROR_TERMINE_ANZAHL_NULL) {
      return 'Die ausgewählten Termine können nicht mehr gelöscht werden, weil sie nicht mehr existieren.';
    } elseif ($this->useCaseResponse->statusCode == TermineLoeschenUseCase::ERROR_TERMINE_UEBERTRAGUNG) {
      return $pAllgSettings->failSubmitMsgKursplanung;
    }
    
    elseif ($this->useCaseResponse->statusCode == HandleTermineSammelAenderungUseCase::ERROR_KURSTAG_KORREKTUR_KEINE_EINGETRAGEN) {
      return $pAllgSettings->failMsgKursplanungKeineEingetr . ' ' . $this->getFailedToUpdateKtString();
    } elseif ($this->useCaseResponse->statusCode == HandleTermineSammelAenderungUseCase::ERROR_KURSTAG_KORREKTUR_TEILWEISE_EINGETRAGEN) {
      return $pAllgSettings->failMsgKursplanungEinigeEingetr . ' ' . $this->getFailedToUpdateKtString();
    } elseif ($this->useCaseResponse->statusCode == HandleTermineSammelAenderungUseCase::ERROR_CONFLICT) {
      return $pAllgSettings->failSubmitMsgConflict;
    } elseif ($this->useCaseResponse->statusCode == HandleTermineSammelAenderungUseCase::ERROR_SAMMELAENDERUNG_FEHLGESCHLAGEN) {
      return $pAllgSettings->failSubmitMsgKursplanung;
    }

    return '';
  }

  private function getFailedToUpdateKtString()
  {
    $result = '';
    foreach ($this->useCaseResponse->failedToUpdateKtAry as $kurstag) {
      $result .= $kurstag->datum . ' ' . $kurstag->zeit_beg . '<br>';
    }

    return $result;
  }

  protected function getJSSelectedIds(): string
  {
    $result = '';
    
    if (isset($this->useCaseResponse->selectedIds) && \StringOperations::strlen($this->useCaseResponse->selectedIds) > 0) {
      $selectedIdsAry = explode(':', $this->useCaseResponse->selectedIds);
      $result .= \JsOperations::getDeclarationJson('KuferTools.SelectedIds', $selectedIdsAry);
    } else {
      $result .= \JsOperations::getDeclarationJson('KuferTools.SelectedIds', array());
    }

    return $result;
  }
}