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

namespace Kufer\KuferTools\Basis\Dokumente\DokumenteUebersicht;

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

  protected function getViewModel()
  {
    $viewModel = $this->getNewViewModel();
    $viewModel->dokumente = $this->useCaseResponse->dokumente;
    $viewModel->showUploadButton = $this->useCaseResponse->showUploadButton;

    return $viewModel;
  }

  protected function getContent()
  {
    $view = $this->getView();

    $result = '';
    $result .= $view->getHeader();
    
    if (count($this->useCaseResponse->dokumente) > 0) {
      $result .= $this->getDokumenteZeilen();
    } else {
      $result .= $view->getNoData();
    }
    $result .= $view->getFooter();

    return $result;
  }

  private function getDokumenteZeilen()
  {
    $dokumenteMitBereichsname = array_map(function($dokument) {
      $dokument->nameBereich = $dokument->getVarValue('bereichsname');
      if ($dokument->nameBereich == '') {
        $dokument->nameBereich = 'Allgemein';
      }

      return $dokument;
    }, $this->useCaseResponse->dokumente);
    $dokumenteNachBereichsname = \ArrayOperations::setAttributAsKeyArray($dokumenteMitBereichsname, 'nameBereich');
    ksort($dokumenteNachBereichsname);

    $result = '';
    foreach ($dokumenteNachBereichsname as $bereichsname => $dokumente) {
      $view = $this->getDokumenteZeilenView($bereichsname, $dokumente);
      $result .= $view->getHeader();
      $result .= $view->getBody();
      $result .= $view->getFooter();
    }

    return $result;
  }

  abstract protected function getNewDokumenteZeilenView($viewModel): DokumenteZeilenView;

  protected function getDokumenteZeilenView($bereichsname, $dokumente)
  {
    $viewModel = new DokumenteZeilenViewModel();
    $viewModel->dokumente = $dokumente;
    $viewModel->bereichsname = $bereichsname;
    $viewModel->showUploadButton = $this->useCaseResponse->showUploadButton;

    return $this->getNewDokumenteZeilenView($viewModel);
  }
}