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

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

use Kufer\KuferTools\Basis\Termine\KursdatenAnpassenView;
use Kufer\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Termine\NachTerminAenderung;

abstract class TerminHinzufuegenFormularPresenter extends \Kufer\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  protected function getViewModel()
  {
    $viewModel = new TerminHinzufuegenFormularViewModel();
    $viewModel->kurstag = $this->useCaseResponse->kurstag;
    $viewModel->kurstag->ueberschrift = $this->useCaseResponse->ueberschrift;
    $viewModel->messageSuccess = $this->getMessageStringSuccess();
    $viewModel->messageError = $this->getMessageStringError();
    $viewModel->columns = $this->useCaseResponse->columns;
    $viewModel->readonly = $this->useCaseResponse->readonly;

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

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

    return $viewModel;
  }

  abstract protected function getKursAnpassenDialogView($viewModel): KursdatenAnpassenView;

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

    return $view->show();
  }

  abstract protected function getInformiereTnDialogView($viewModel): \Kufer\KuferTools\Basis\Kursdetails\DetailsReiter\Termine\NachTerminAenderung\InformiereTnDialogView;

  
  private function getInformiereTnDialog()
  {
    $viewModel = new NachTerminAenderung\InformiereTnDialogViewModel();
    $viewModel->kurs = $this->useCaseResponse->kurs;
    $viewModel->action = $this->useCaseResponse->actionInformiereTnDialog;
    $viewModel->termineHinzugefuegt = $this->useCaseResponse->terminHinzugefuegt;
    $view = $this->getInformiereTnDialogView($viewModel);

    return $view->show();
  }

  private function getMessageStringSuccess()
  {
    return $this->useCaseResponse->statusCode == TerminHinzufuegenAbsendenUseCase::SUCCESS_KURSTAG_BEARBEITEN_ERFOLGREICH;
  }

  private function getMessageStringError()
  {
    if ($this->useCaseResponse->statusCode == TerminHinzufuegenAbsendenUseCase::ERROR_KURSTAG_BEARBEITEN_FEHLGESCHLAGEN) {
      return 'fehlgeschlagen';
    }
    if ($this->useCaseResponse->statusCode == TerminHinzufuegenAbsendenUseCase::ERROR_DOPPELT_ABSENDEN) {
      return 'mehrfaches_absenden';
    }

    return '';
  }

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