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

namespace Kufer\Web\KuferTools\Basis\Raumbelegung\Raumdetails;

abstract class RaumDetailsPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  abstract protected function getReiterView($pViewModel);

  protected function getButtonHtml()
  {
    $buttonleiste = new \Kufer\Web\KuferTools\Basis\Button\Buttonleiste();

    return $buttonleiste->getHtmlButtonleiste($this->useCaseResponse->reiterButtons, 'raumdetails_buttons');
  }

  protected function getViewModel()
  {
    $viewModel = new RaumDetailsViewModel();
    $viewModel->kursort = $this->useCaseResponse->kursort;
    $viewModel->kursort->nextRaum = $this->useCaseResponse->nextRaum;
    $viewModel->kursort->previousRaum = $this->useCaseResponse->previousRaum;

    $viewModel->kursort->reiterButtons = $this->getButtonHtml();
    $viewModel->reiter = $this->getReiter();

    return $viewModel;
  }

  private function getReiter()
  {
    $viewModel = new ReiterViewModel();
    $viewModel->kursort = $this->useCaseResponse->kursort;
    $viewModel->reiter = $this->useCaseResponse->reiter;
    $view = $this->getReiterView($viewModel);

    return $view->show();
  }

  protected function getJSDeclarations(): string
  {
    $result = parent::getJSDeclarations();
    $result .= 'registerNamespace("KuferTools.Raumuebersicht");' . "\n";
    
    $result .= \JsOperations::getDeclarationString('KuferTools.OeffneReiter', $this->useCaseResponse->oeffneReiter);
    
    $result .= \JsOperations::getDeclarationString('KuferTools.ActionMerkeReiter', 'merkeRaumDetailsReiter');
    $result .= \JsOperations::getDeclarationInt('KuferTools.raumNr', $this->useCaseResponse->raumNr);
    $result .= \JsOperations::getDeclarationJson('KuferTools.Raumuebersicht.RaumartDialog', $this->useCaseResponse->hlRaumartDialog);

    return $result;
  }

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

  protected function getCssFilesSrcAry(): array
  {
    return array_merge(
      parent::getCssFilesSrcAry(),
      array(
        $this->getCssLinkFromSys('collapse.css'),
        $this->getCssLinkFromSys('detailsseite.css')
      )
    );
  }

  protected function getSeitenTitel(): string
  {
    return 'Details zum Raum: ' . $this->useCaseResponse->kursort->bezeichnung;
  }
}