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

namespace Kufer\Web\KuferTools\Firma\MitarbeiterUebersicht\MitarbeiterNoten;

use Kufer\Web\KuferTools\Basis\UseCaseBuilder\ToolSection;

class FaecherPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\Presenter
{
  private $index;
  private $toolSection;
  private $toolSettings;

  public function __construct($useCaseResponse, $index, ToolSection $toolSection, \ToolSettings $toolSettings)
  {
    parent::__construct($useCaseResponse);
    $this->index = $index;
    $this->toolSection = $toolSection;
    $this->toolSettings = $toolSettings;
  }

  public function present()
  {
    $result = '';
    $faecherView = $this->getView();
    $result .= $faecherView->getHeader();
    $result .= $this->getContent();
    $result .= $faecherView->getFooter();

    return $result;
  }

  protected function getContent()
  {
    return $this->getAnderenContentAlsBody($this->useCaseResponse['noten']);
  }

  protected function getAnderenContentAlsBody(array $datamodulArray): string
  {
    $result = '';
    $view = $this->getView();
    if (!$this->isDatamodulAryEmpty($datamodulArray)) {
      foreach ($datamodulArray as $key => $datamodul) {
        $result .= $this->getAnderenContent($datamodul, $key);
      }
    } else {
      $result .= $view->getNoData();
    }

    return $result;
  }

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

  protected function getViewModel()
  {
    $viewModel = new FaecherViewModel();
    $viewModel->toolSection = $this->toolSection;
    $viewModel->toolSettings = $this->toolSettings;
    $nichtBeurteilt = ($this->useCaseResponse['tnFach']->nichtbeurteilt) ? ' (nicht beurteilt)' : '';
    $viewModel->fachName = $this->useCaseResponse['name'] . $nichtBeurteilt;
    $viewModel->noten_anzahl = 'Notenanzahl: ' . $this->useCaseResponse['notenAnzahl'];
    
    if ($this->useCaseResponse['notenDurchschnitt'] == 0) {
      $viewModel->noten_durchschnitt = 'ohne Noten';
    } else {
      $viewModel->noten_durchschnitt = 'Note: ' . $this->useCaseResponse['notenDurchschnitt'];
    }
    $viewModel->ist_pflichtfach = ($this->useCaseResponse['isPflichtfach'] ? 'Pflichtfach' : 'Wahlfach');
    $viewModel->index = $this->index;

    return $viewModel;
  }

  protected function getAnderenContent($datamodul, $key): string
  {
    $viewModel = new NotenViewModel();
    $pruefung = (trim($datamodul['tnNote']->pruefung) != '') ? $datamodul['tnNote']->pruefung : 'ohne Bezeichnung';
    $viewModel->pruefung = 'Prüfung: ' . $pruefung;
    $viewModel->datum = 'Datum: ' . $datamodul['tnNote']->datum;
    $viewModel->note = 'Note: ' . $datamodul['tnNote']->note;
    $viewModel->gewichtung = 'Gewichtung: ' . $datamodul['tnNote']->gewichtung;
    $viewModel->index = $key;
    $notenView = new NotenView($viewModel);

    return $notenView->show();
  }
}