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

namespace Kufer\Web\KuferTools\Basis\TeilnehmerInfo\TeilnehmerUebersicht;


abstract class TeilnehmerUebersichtUseCase extends \Kufer\Web\KuferTools\Basis\Uebersicht\UebersichtMitWssUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new TeilnehmerUebersichtResponse());

    $searchFilter = new \Kufer\Web\KuferTools\Utils\FilterSearch\TeilnehmerSearchFilter();
    if (($this->request->aendereFilter ?? false) && isset($this->request->suchParameter)) {
      $searchFilter->setSearchMapToSession($this->request->suchParameter, 'tool' . $this->getToolId());
    }
  }

  public function action()
  {
    $this->resetSessionVars();

    return parent::action();
  }

  private function resetSessionVars()
  {
    \SessionOperations::setVarValueWTIntern('newTnStatusCode', '');
    \SessionOperations::setVarValueWTIntern('newTnWrongFields', '');
    \SessionOperations::setVarValueWTIntern('filterBelegteKurse_tool' . $this->getToolId(), null);
  }

  protected function getDatamoduleProSeite()
  {
    return $this->toolSettings->teilnehmerproseite > 0 ? $this->toolSettings->teilnehmerproseite : 6;
  }

  
  abstract protected function getTeilnehmerHelper();

  protected function getAlleIds()
  {
    $tnHelper = $this->getTeilnehmerHelper();

    if ($this->request->einstieg) {
      return $tnHelper->getIdsOhneFilter();
    } else {
      return $tnHelper->getIdsMitFilter($this->getToolId());
    }
  }

  protected function getUeberschrift()
  {
    return 'Übersicht der ' . $this->response->sprachSettings->Teilnehmer['Plural']['Genitiv'];
  }

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

    if ($this->isNeuerTeilnehmerAllowed() && $this->verlinkePanelHeaderAllowed()) {
      $buttons[] = array($buttonFactory->getNeuerPersonenButton('neuer Teilnehmer', 'newTeilnehmer', 'neuer Teilnehmer'));
    }

    $anzahlEintraege = count($this->response->teilnehmer);
    
    $this->addFilterButton($buttons, $buttonFactory, $anzahlEintraege, 'Filter', 'suchen_button_tn', 'reset_filter_button_tn');

    return $buttons;
  }

  protected function isFilterGesetzt()
  {
    $tnSearch = new \Kufer\Web\KuferTools\Utils\FilterSearch\TeilnehmerSearchFilter();

    return (!isset($this->request->suchParameter) || ($this->request->aendereFilter ?? false)) && !$tnSearch->isSearchMapFromSessionEmpty('tool' . $this->getToolId());
  }

  
  abstract protected function isNeuerTeilnehmerAllowed();

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

    $url = \URL::loadCurrent();
    $persErweiterungStrategy = new \Kufer\Web\KuferTools\Utils\PersonenErweiternStrategies\ErweitereTeilnehmerStrategy();
    $teilnehmer = $persErweiterungStrategy->fillAll($this->response->teilnehmer, $this->getToolId(), '', $url->getUrlRelative(), 'Zurück');
    $this->response->teilnehmer = $teilnehmer;

    
    $this->response->datamodule = $this->response->teilnehmer;
    $this->response->newTnStatusCode = $this->request->newTnStatusCode;
    $this->response->newTnWrongFields = $this->request->newTnWrongFields;

    $this->response->uebersichtAlsTabelle = isset($this->toolSettings->teilnehmerUebersichtAlsTabelle) && $this->toolSettings->teilnehmerUebersichtAlsTabelle;

    $this->response->refererUriPart = '&referer=' . urlencode(\URL::loadCurrent()->getUrlRelative()) . '&refererLabel=' . urlencode(\StringOperations::htmlentities('Zurück zur Übersicht'));

    return $this->response;
  }

  protected function getDatamodulOnCurrentPage()
  {
    return new \Kufer\Web\KuferTools\Utils\ResponseStrategies\ResponseTeilnehmerOnCurrentPage($this);
  }
}

class TeilnehmerUebersichtRequest extends \Kufer\Web\KuferTools\Basis\Uebersicht\UebersichtMitWssRequest
{
  public $newTnStatusCode;
  public $newTnWrongFields;
}

class TeilnehmerUebersichtResponse extends \Kufer\Web\KuferTools\Basis\Uebersicht\UebersichtMitWssResponse
{
  public $teilnehmer = array();
  public $newTnStatusCode;
  public $newTnWrongFields;
  public $uebersichtAlsTabelle;
  public $refererUriPart;
}