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

namespace Kufer\Web\KuferTools\Basis\GebaeudeGrafik;

class GebaeudeGrafikPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  protected function getContent()
  {
    if ($this->useCaseResponse->noData) {
      $view = $this->getView();

      return $view->getNoData();
    }

    return $this->getAnderenContentAlsBody($this->useCaseResponse->raumsteps);
  }

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

  protected function createGebaeudeGrafikEntryViewModel(): GebauedeGrafikEntryViewModel
  {
    return new GebauedeGrafikEntryViewModel();
  }

  protected function createGebaeudeGrafikEntryView(GebauedeGrafikEntryViewModel $viewModel): GebauedeGrafikEntryView
  {
    return new GebauedeGrafikEntryView($viewModel);
  }

  
  protected function getAnderenContent($datamodul, $key): string
  {
    $viewModel = new GebaeudeGrafikRowViewModel();
    $viewModel->tabellenZeile = $datamodul;
    $viewModel->index = $key;
    $viewModel->kursplanungDatum = $this->useCaseResponse->datVon;
    $viewModel->uhrVon = $this->useCaseResponse->uhrVon;
    $viewModel->uhrBis = $this->useCaseResponse->uhrBis;
    $terminView = $this->getView4AnderenContent($viewModel);

    $result = $terminView->getHeader();
    foreach ($datamodul->tabellenZellen as $tabellenzelle) {
      $result .= $terminView->getBody();

      foreach ($tabellenzelle->tabellenEintraege as $k => $tabellenEintrag) {
        $eintragViewModel = $this->createGebaeudeGrafikEntryViewModel();
        $eintragViewModel->tabellenEintrag = $tabellenEintrag;
        $eintragViewModel->medienanzeigen = $this->useCaseResponse->medienanzeigen;
        if (isset($tabellenEintrag->kurstag->knr)) { 
          $eintragViewModel->kursDetailsLink = call_user_func($this->useCaseResponse->kursdetailslinkFunction, $tabellenEintrag->kurstag);
          $eintragViewModel->showBemerkungenInsteadOfKursTitel = call_user_func($this->useCaseResponse->showBemerkungenInsteadOfKursTitelFunction, $tabellenEintrag->kurstag);
        }
        
        $eintragViewModel->showDozent = $this->useCaseResponse->showDozent;
        $eintragViewModel->showKursNr = $this->useCaseResponse->showKursNr;
        $eintragViewModel->showKursTitel = $this->useCaseResponse->showKursTitel;
        $eintragViewModel->datVon = $this->useCaseResponse->datVon;

        $eintragViewModel->index = $k;
        $eintragView = $this->createGebaeudeGrafikEntryView($eintragViewModel);
        $result .= $eintragView->show();
      }
      $result .= $terminView->getFooter();
    }
    $result .= $terminView->getNoColumn();

    return $result;
  }

  protected function getView4AnderenContent($viewModel)
  {
    return new GebaeudeGrafikRowView($viewModel);
  }

  protected function getNewViewModel(): GebaeudeGrafikViewModel
  {
    return new GebaeudeGrafikViewModel();
  }

  protected function getViewModel()
  {
    $viewModel = $this->getNewViewModel();
    $viewModel->raumsteps = $this->useCaseResponse->raumsteps;
    $viewModel->timesteps = $this->useCaseResponse->timesteps;
    $viewModel->gebaeude = $this->useCaseResponse->gebaeude;
    $viewModel->vhsname = $this->useCaseResponse->vhsname;
    $viewModel->stand = date('d.m.Y');
    $viewModel->farbeLegends = $this->useCaseResponse->farbeLegends;
    $viewModel->farbeLegendsHeader = $this->useCaseResponse->farbeLegendsHeader;
    $viewModel->datVon = $this->useCaseResponse->datVon;
    $viewModel->wkAndDate = $this->useCaseResponse->wkAndDate;
    $viewModel->uhrVon = $this->useCaseResponse->uhrVon;
    $viewModel->uhrBis = $this->useCaseResponse->uhrBis;
    $viewModel->toolID = $this->useCaseResponse->toolID;
    $viewModel->filterGebaeude = $this->useCaseResponse->filterGebaeude;

    return $viewModel;
  }

  protected function getJsFilesSrcAryWeitere(): array
  {
    return array(
        $this->getJsFileFromSys('hm_raumbelegung.js'),
        $this->getJsFileFromSys('filter.js')
        );
  }

  protected function getJSDeclarations(): string
  {
    $result = parent::getJSDeclarations();
    $result .= 'registerNamespace("KuferTools.Grafik");' . "\n";
    $result .= 'registerNamespace("KuferTools.Grafik.Datum");' . "\n";
    $result .= \JsOperations::getDeclarationInt('KuferTools.Grafik.Datum.WoZur', DATE_WO_ZUR);
    $result .= \JsOperations::getDeclarationInt('KuferTools.Grafik.Datum.WoVor', DATE_WO_VOR);
    $result .= \JsOperations::getDeclarationInt('KuferTools.Grafik.Datum.TagZur', DATE_TAG_ZUR);
    $result .= \JsOperations::getDeclarationInt('KuferTools.Grafik.Datum.TagVor', DATE_TAG_VOR);

    return $result;
  }
}