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

namespace Kufer\Web\KuferTools\Dozent\SammelVertraege;

use Kufer\KuferTools\Utils\Blaettern;
use Kufer\KuferTools\Utils\StatusMessages\StatusMessage;
use Kufer\KuferTools\Utils\StatusMessages\StatusMessageContainer;
use Kufer\Web\Classes\Datamodul\SammelvertragDatDoc;
use Kufer\Web\KuferTools\Utils\Dozent\SammelVertraegeUtils;

class SammelVertraegeUseCase extends \Kufer\KuferTools\Basis\Uebersicht\UebersichtMitWssUseCase
{
  
  protected $sammelVertraege;

  
  protected $alleSammelVertraege;

  public function __construct($request, $response = null)
  {
    parent::__construct($request, $response ?? new SammelVertraegeResponse());
  }

  public static function getToolId()
  {
    return \ToolsAPI::TOOL_DOZ_SAMMELVERTRAEGE;
  }

  public static function getToolSectionId()
  {
    return 803;
  }

  public function hasAccess($pToolSectionId = null)
  {
    if (!parent::hasAccess($pToolSectionId)) {
      return false;
    }

    
    if ($this->getUser()->getDnrIdentifier()->isEmpty(false)) {
      return false;
    }

    if (!\SessionOperations::isDmzBetrieb()) {
      return false;
    }

    return true;
  }

  protected function getAlleIds()
  {
    if ($this->alleSammelVertraege === false) {
      return array();
    }

    return array_map(static function(SammelvertragDatDoc $vertraege) {
      return \ArrayOperations::firstValue($vertraege->id);
    }, $this->alleSammelVertraege);
  }

  protected function getUeberschrift()
  {
    return 'Offene ' . $this->toolSettings->wortPluralVertraege;
  }

  protected function getDatamodulOnCurrentPage()
  {
    return null;
  }

  protected function getButtons()
  {
    $buttons = array();
    $buttons[] = array(
      new \Kufer\KuferTools\Basis\Button\HtmlButton(
        'Übersicht alte ' . $this->toolSettings->wortPluralVertraege,
        'alte_sammelvertraege',
        'index.php?tool_id=' . $this->getToolId() . '&action=alte_sammelvertraege&einstieg=1',
        'search',
        'Übersicht alte ' . $this->toolSettings->wortPluralVertraege
      )
    );

    return $buttons;
  }

  protected function getPanelButtonCallBacks()
  {
    $buttons = array();
    $buttonFactory = new \Kufer\KuferTools\Basis\Button\ButtonFactory();

    $buttons[] = function(SammelvertragDatDoc $vertraege) use ($buttonFactory) {
      return $buttonFactory->getSammelVertraegeAkzeptieren($this->getToolId(), \ArrayOperations::firstValue($vertraege->id), $this->toolSettings->wortSingularVertrag);
    };

    $buttons[] = function(SammelvertragDatDoc $vertraege) use ($buttonFactory) {
      return $buttonFactory->getSammelVertraegeAblehnen($this->getToolId(), \ArrayOperations::firstValue($vertraege->id), $this->toolSettings->wortSingularVertrag);
    };

    $buttons[] = function(SammelvertragDatDoc $vertraege) use ($buttonFactory) {
      return $buttonFactory->getSammelVertraegeDrucken($this->getToolId(), \ArrayOperations::firstValue($vertraege->id), $this->toolSettings->wortSingularVertrag);
    };

    return $buttons;
  }

  protected function vorAction()
  {
    parent::vorAction();

    

    $this->alleSammelVertraege = $this->getSammelVertraege();
    if ($this->alleSammelVertraege !== false) {
      $blaettern = new Blaettern($this->alleSammelVertraege, 6, $this->request->seite);
      $this->sammelVertraege = $blaettern->getItemsOnCurrentPage();
    } else {
      $this->sammelVertraege = false;
    }
  }

  
  protected function getSammelVertraege()
  {
    return SammelVertraegeUtils::getSammelvertraege(
      $this->getUser()->getDnrIdentifier(),
      SammelVertraegeUtils::STATUS_SAMMELVERTRAEGE_OPEN,
      $this->toolSettings->oldVertragPartOfNew
    );
  }

  public function action()
  {
    $result = parent::action();
    $result->datamodule = $this->sammelVertraege === false ? array() : $this->sammelVertraege;
    $result->type = $this->request->type;

    if ($this->sammelVertraege === false) {
      StatusMessageContainer::getSharedInstance()->addStatusMessageObj(
        StatusMessage::getErrorMessageObj('Ein technischer Fehler ist aufgetreten. '
        . 'Bitte versuchen Sie es erneut oder kontaktieren Sie die Einrichtung.')
      );
    }

    return $result;
  }
}