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

namespace Kufer\KuferTools\Teilnehmer\ZsaTeilnehmerUebersicht\TeilnehmerDetails;

use Kufer\KuferTools\Basis\Kursdetails\DetailsReiter\MerkeReiter\MerkeReiterUseCase as MerkeReiterUseCase;

class TeilnehmerDetailsUseCase extends \Kufer\KuferTools\Basis\UseCase\ToolUseCase
{
  private $bkbvtnHandler;

  public function __construct($request)
  {
    parent::__construct($request, new TeilnehmerDetailsResponse());
    $user = $this->getUser();
    $this->bkbvtnHandler = new \Kufer\KuferTools\Utils\BkBvTnHandler\Registrierungen4Bildungsverantwortlichen($user->tnr);
    $this->initDBW();
  }

  private function initDBW()
  {
    $searchAPI = new \ZsaBkBvTnSuchAPI();

    if (!empty($this->request->filter_status)) {
      if (!is_array($this->request->suchParameter)) {
        $this->request->suchParameter = array();
      }
      $this->request->suchParameter['ss_status_tool42'] = $this->request->filter_status;
    }

    if (isset($this->request->suchParameter)) {
      $searchAPI->setSearchParamsToSession($this->request->suchParameter);
    }

    $this->bkbvtnHandler->initFilterFromSession($this->getToolId());
  }

  public static function getToolSectionId()
  {
    return 527;
  }

  public static function getToolId()
  {
    return 42;
  }

  public function action()
  {
    $bkbvtn = $this->bkbvtnHandler->getDatamodulById($this->request->bkbvtn);

    return $this->getResponse($bkbvtn);
  }

  public function hasAccess($pToolsectionId = null)
  {
    if (!\Kufer\KuferTools\Basis\UseCase\ToolUseCase::hasAccess($pToolsectionId)) {
      return false;
    }

    $alleIds = $this->getAlleIdsOhneFilter();
    if (!in_array($this->request->bkbvtn, $alleIds)) {
      return false;
    }

    return true;
  }

  protected function getAlleIds()
  {
    return $this->bkbvtnHandler->getAlleIds();
  }

  protected function getAlleIdsOhneFilter()
  {
    $user = $this->getUser();
    $bkbvtnHandler = new \Kufer\KuferTools\Utils\BkBvTnHandler\Registrierungen4Bildungsverantwortlichen($user->tnr);

    return $bkbvtnHandler->getAlleIds();
  }

  protected function getBackLink()
  {
    return 'index.php?tool_id=42';
  }

  protected function getBackButtonLabel()
  {
    return 'Zurück zur Übersicht';
  }

  protected function getResponse($bkbvtn)
  {
    $this->handleResponseStrategies();
    $this->response->datamodul = $bkbvtn;
    $this->setBenachbarteTnrsToResponse($bkbvtn);

    $this->response->reiter = $this->getReiter();
    $this->response->oeffneReiter = MerkeReiterUseCase::oeffneReiter($this->getToolId(), $this->getToolSectionId());

    $this->response->backLink = $this->getBackLink();
    $this->response->backButtonLabel = $this->getBackButtonLabel();

    $this->response->ueberschrift = $this->getUeberschrift($bkbvtn);

    $this->response->statusCode = $this->request->statusCode;

    return $this->response;
  }

  
  protected function getUeberschrift($bkbvtn)
  {
    return $this->response->sprachSettings->Teilnehmer['Singular']['Nominativ'] . '  ' . $bkbvtn->teilnehmer->getVarValue('titel_name_vorname');
  }

  protected function setBenachbarteTnrsToResponse($bkbvtn)
  {
    $alleIds = $this->getAlleIds();
    $index = \array_search($bkbvtn->id, $alleIds);

    if ($index !== false) {
      if (isset($alleIds[$index - 1])) {
        $this->response->previousBkbvtn = $alleIds[$index - 1];
      }
      if (isset($alleIds[$index + 1])) {
        $this->response->nextBkbvtn = $alleIds[$index + 1];
      }
    }
  }

  protected function getResponseStrategies()
  {
    return array(
        new \Kufer\KuferTools\Utils\ResponseStrategies\ResponseMitRahmen($this)
    );
  }

  protected function getTeilnehmer()
  {
    $bkbvtnid = isset($this->request->bkbvtn) ? $this->request->bkbvtn : '';
    $dbwBkBvTn = new \DBWorkZsaBkBvTn(1, true);
    $bkbvtn = $dbwBkBvTn->getOne($bkbvtnid);

    return $bkbvtn->teilnehmer;
  }

  protected function getReiter()
  {
    $result = array();
    $reiterBeschriftung = $this->getReiterBeschriftung();

    $reiterSeite = new \ReiterSeite($this->getToolSectionId(), $reiterBeschriftung);
    $reiterAry = $reiterSeite->getReiterKeysAry();
    $teilnehmer = $this->getTeilnehmer();
    foreach ($reiterAry as $reiter) {
      $recht = $reiterSeite->getRecht($reiter);
      if ($this->isRechtAllowed($recht)) {
        $reiterDm = new \Datamodul();
        $reiterDm->label = $reiterSeite->getLabel($reiter);
        $reiterDm->action = $reiterSeite->getAction($reiter);
        $reiterDm->tnr = $teilnehmer->id;
        $reiterDm->toolId = $this->getToolId();
        $result[] = $reiterDm;
      }
    }

    return $result;
  }

  protected function getReiterBeschriftung()
  {
    return isset($this->toolSettings->reiterBeschriftung) ? $this->toolSettings->reiterBeschriftung : '';
  }
}

class TeilnehmerDetailsRequest
{
  public $tnr;
  public $referer;
  public $refererLabel;
  public $newTnStatusCode;
  public $newTnWrongFields;
  public $statusCode;
}

class TeilnehmerDetailsResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $datamodul;
  public $menuPunkte;
  public $reiter;
  public $previousBkbvtn;
  public $nextBkbvtn;
  public $reiterButtons;
  public $oeffneReiter;
  public $ueberschrift;
  public $backLink;
  public $backButtonLabel;
  public $statusCode;
}