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

namespace Kufer\KuferTools\Basis\Kursdetails\DetailsReiter\Termine\TerminBearbeiten;

use Kufer\KuferTools\Basis\Kursdetails\DetailsReiter\Termine\NachTerminAenderung;
use Kufer\KuferTools\Basis\Termine\KursdatenAnpassenView;

abstract class TerminBearbeitenFormularPresenter extends \Kufer\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  protected function getNewViewModel()
  {
    return new TerminBearbeitenFormularViewModel();
  }

  protected function getViewModel()
  {
    $allgSettings = \AllgSettingsAPI::getAllgSettings();
    $viewModel = $this->getNewViewModel();
    $viewModel->kurstag = $this->useCaseResponse->kurstag;
    $viewModel->kurstag->ueberschrift = $this->useCaseResponse->ueberschrift;
    $viewModel->messageSuccess = $this->getMessageStringSuccess($allgSettings);
    $viewModel->messageError = $this->getMessageStringError();
    $viewModel->columns = $this->useCaseResponse->columns;

    
    
    
    if (count($this->useCaseResponse->nichtPassendeKursdaten) > 0 && $this->useCaseResponse->hasRecht4KursAnpassen
            && $this->useCaseResponse->statusCode !== TerminBearbeitenAbsendenUseCase::ERROR_DOPPELT_ABSENDEN) {
      $viewModel->kursAnpassenDialog = $this->getKursAnpassenDialog();
    }

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

    return $viewModel;
  }

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

    return $view->show();
  }

  abstract protected function getKursdatenAnpassenView($viewModel): KursdatenAnpassenView;

  
  private function getInformiereTnDialog()
  {
    $viewModel = new NachTerminAenderung\InformiereTnDialogViewModel();
    $viewModel->kurs = $this->useCaseResponse->kurs;
    $viewModel->action = $this->useCaseResponse->actionInformiereTnDialog;
    $viewModel->termineBearbeitet = $this->useCaseResponse->terminBearbeitet;
    $view = $this->getInformiereTeilnehmerDialogView($viewModel);

    return $view->show();
  }

  abstract protected function getInformiereTeilnehmerDialogView($viewModel): NachTerminAenderung\InformiereTnDialogView;

  private function getMessageStringSuccess($allgSettings)
  {
    if ($this->useCaseResponse->statusCode == TerminBearbeitenAbsendenUseCase::SUCCESS_KURSTAG_BEARBEITEN_ERFOLGREICH) {
      return $allgSettings->successMsgKursplanung;
    }

    return '';
  }

  private function getMessageStringError()
  {
    if ($this->useCaseResponse->statusCode == TerminBearbeitenAbsendenUseCase::ERROR_KURSTAG_BEARBEITEN_FEHLGESCHLAGEN) {
      return 'Ihre Korrektur für den Kurstag konnte nicht übermittelt werden. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung.';
    }
    if ($this->useCaseResponse->statusCode == TerminBearbeitenAbsendenUseCase::ERROR_DOPPELT_ABSENDEN) {
      return 'Ihre Änderungen für den Kurstag wurden bereits abgesendet und werden deshalb kein zweites Mal versendet.';
    }

    return '';
  }

  protected function getJsFilesSrcAryWeitere()
  {
    return array(
      $this->getJsFileFromSys('terminplanung.js'),
      $this->getJsFileFromSys('doz_kursplanung.js'),
      $this->getJsFileFromOldTools('medienhandler.js')
    );
  }
}