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

namespace Kufer\Web\KuferTools\Dozent\Anwesenheiten\NotenUebersicht;

class NotenUebersichtPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  private $allgSettings;

  public function __construct($useCaseResponse)
  {
    parent::__construct($useCaseResponse);
    $this->allgSettings = \AllgSettingsAPI::getAllgSettings();
  }

  protected function getSeitenTitel(): string
  {
    return 'Noten für den Kurs '
      . $this->useCaseResponse->kurs->getVarValue('nr_anzeige')
      . rtrim(' - ' . $this->useCaseResponse->kurs->getVarValue('kurzbez'), ' -');
  }

  protected function getContent()
  {
    $view = $this->getView();
    if (!is_null($this->useCaseResponse->keineBelegung) || !is_null($this->useCaseResponse->keineFaecher)) {
      return $view->getNoData();
    }

    return parent::getContent();
  }

  protected function getViewModel()
  {
    $viewModel = new NotenUebersichtViewModel();

    $viewModel->knr = $this->useCaseResponse->kurs->id;
    $viewModel->datum = $this->useCaseResponse->datum;
    $viewModel->title = $this->useCaseResponse->sprachSettings->Kurs['Singular_mit_Artikel']['Akkusativ'];
    $viewModel->keineBelegung = $this->useCaseResponse->keineBelegung;
    $viewModel->keineFaecher = $this->useCaseResponse->keineFaecher;

    $viewModel->hinweisMsg = $this->getHinweisMsg();
    $viewModel->successMsg = $this->getSuccessMsg();
    $viewModel->errorMsg = $this->getErrorMsg();
    $viewModel->doppeltVersandtMsg = $this->getDoppeltVersandtInfo();

    $viewModel->kursphase = $this->useCaseResponse->kurs->phase;
    $viewModel->notensystem = $this->useCaseResponse->kurs->notensystem;
    $viewModel->anwRatio = $this->useCaseResponse->anwRatio;
    $viewModel->abwCount = $this->useCaseResponse->abwCount;

    $viewModel->fachArry = $this->useCaseResponse->fachArry;
    $viewModel->belegungen = $this->useCaseResponse->belegungen;
    $viewModel->hlIndividualNoten = $this->useCaseResponse->hlIndividualNoten;
    $viewModel->hlNiveaus = $this->useCaseResponse->hlNiveaus;
    $viewModel->hlnoten = $this->useCaseResponse->hlnoten;

    $viewModel->showNichtBenotetBoxen = $this->useCaseResponse->showNichtBenotetBoxen;
    $viewModel->showNote = $this->useCaseResponse->showNote;
    $viewModel->showTxtGer = $this->useCaseResponse->showTxtGer;
    $viewModel->showTxtEng = $this->useCaseResponse->showTxtEng;
    $viewModel->showTxtZusatz1 = $this->useCaseResponse->showTxtZusatz1;
    $viewModel->showTxtZusatz2 = $this->useCaseResponse->showTxtZusatz2;
    $viewModel->useNoteSelect = $this->useCaseResponse->useNoteSelect;
    $viewModel->msgNotenBezeichnerMehrphasig = $this->useCaseResponse->msgNotenBezeichnerMehrphasig;
    $viewModel->msgNotenHinweisMehrphasig = $this->useCaseResponse->msgNotenHinweisMehrphasig;
    $viewModel->gibtFaecher = $this->useCaseResponse->gibtFaecher;
    $viewModel->gibtIndividualNoten = $this->useCaseResponse->gibtIndividualNoten;

    $viewModel->flagDieserTnHatMindestensEinFach = $this->useCaseResponse->flagDieserTnHatMindestensEinFach;
    $viewModel->flagKeinSubmitErlauben = $this->useCaseResponse->flagKeinSubmitErlauben;
    $viewModel->flagEsGibtTNFaecher = $this->useCaseResponse->flagEsGibtTNFaecher;

    return $viewModel;
  }

  private function getHinweisMsg()
  {
    $stickTag = '<span></span>';
    $hinweis = strip_tags($this->allgSettings->msgNotenHinweis, $stickTag);

    return str_replace('Teilnehmer', $this->useCaseResponse->sprachSettings->Teilnehmer['Plural']['Nominativ'], $hinweis);
  }

  private function getSuccessMsg()
  {
    if ($this->useCaseResponse->status == \Kufer\Web\KuferTools\Dozent\Anwesenheiten\NotenSpeichern\NotenSpeichernUseCase::UEBERTRAGUNG_SUCCESS) {
      if (!empty($this->allgSettings->successMsgNotenEinreichen)) {
        return $this->allgSettings->successMsgNotenEinreichen;
      }

      return 'Die Noten wurden erfolgreich eingereicht!';
    } elseif ($this->useCaseResponse->status == \Kufer\Web\KuferTools\Dozent\Anwesenheiten\NotenSpeichern\NotenSpeichernUseCase::SPEICHERN_SUCCESS) {
      if (!empty($this->allgSettings->successMsgNotenSpeichern)) {
        return $this->allgSettings->successMsgNotenSpeichern;
      }

      return 'Die Noten wurden erfolgreich gespeichert!';
    }

    return '';
  }

  private function getErrorMsg()
  {
    if ($this->useCaseResponse->status == \Kufer\Web\KuferTools\Dozent\Anwesenheiten\NotenSpeichern\NotenSpeichernUseCase::SUBMIT_FAILED) {
      if (!empty($this->allgSettings->failSubmitMsgNoten)) {
        return $this->allgSettings->failSubmitMsgNoten;
      }

      return 'Beim Speichern der Noten ist ein Fehler aufgetreten!';
    }

    return '';
  }

  private function getDoppeltVersandtInfo()
  {
    if ($this->useCaseResponse->status == \Kufer\Web\KuferTools\Dozent\Anwesenheiten\NotenSpeichern\NotenSpeichernUseCase::DOPPELT_AUFGERUFEN) {
      return 'Ihre gewünschte Änderung wurde bereits versendet und wird deshalb kein 2. Mal abgeschickt.';
    }

    return '';
  }

  protected function getView()
  {
    return new NotenUebersichtView($this->getViewModel());
  }

  protected function getJSDeclarations(): string
  {
    $result = parent::getJSDeclarations();
    $result .= 'registerNamespace("KuferTools.ReloadSchutz");' . "\n";
    $result .= \JsOperations::getDeclarationInt('KuferTools.ReloadSchutz.PostID', (1 + \SessionOperations::getVarValueWTIntern('postId', 0)));

    return $result;
  }

  protected function getJsFilesSrcAryWeitere(): array
  {
    return array(
      $this->getJsFileFromOldTools('noteneingabe.js')
    );
  }
}