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

namespace Kufer\KuferTools\Basis\TeilnehmerInfo\Detailsreiter\BelegteKurse;

use Kufer\KuferTools\Utils\UrlHelper\UrlHelperTeilnehmerDetails as UrlHelperTeilnehmerDetails;

abstract class BelegteKurseUseCase extends \Kufer\KuferTools\Basis\UseCase\EinzelTeilnehmerUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new BelegteKurseResponse());
  }

  public function action()
  {
    $belegungen = $this->getBelegungen();

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

  
  abstract protected function getBelegungenToolId();

  protected function getBelegungen()
  {
    $belegungshelper = new \Kufer\KuferTools\Utils\DatamodulHelper\BelegungsHelper\MitarbeiterBelegungen($this->toolSettings, $this->request->tnr);
    $belegungen = $belegungshelper->getDatamoduleMitFilter($this->getToolId());
    
    $this->setUrl2KursDetailsInTool($belegungen, $this->getBelegungenToolId(), new UrlHelperTeilnehmerDetails());

    return $this->setAbmeldenAllowed($belegungen);
  }

  
  protected function setAbmeldenAllowed($pBelegungen)
  {
    $knrsInKursuebersicht = $this->getKnrsInKursuebersicht();
    foreach ($pBelegungen as $belegung) {
      $belegung->abmeldenAllowed = in_array($belegung->knr, $knrsInKursuebersicht);
    }

    return $pBelegungen;
  }

  private function getKnrsInKursuebersicht()
  {
    static $cache = null;
    if (is_null($cache)) {
      $kursHelper = \Kufer\KuferTools\Utils\DatamodulHelper\KursHelper\KursHelperFactory::getKursHelperByToolID($this->getToolIdKursuebersicht(), \ToolSettingsAPI::getToolSettings($this->getToolIdKursuebersicht()));
      $cache = $kursHelper->getIdsMitFilter($this->getToolIdKursuebersicht(), null, null, false);
    }

    return $cache;
  }

  abstract protected function getToolIdKursuebersicht();

  protected function getResponse($belegungen)
  {
    $this->handleResponseStrategies();
    $this->response->belegungen = $belegungen;
    $this->response->reiterButtons = $this->getButtons();
    $this->response->changedBelegungen = $this->request->changedBelegungen;
    $this->response->teilnehmer = $this->getTeilnehm($this->getRequestedIdentifier());

    return $this->response;
  }

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

  private function isDatensatzLeer()
  {
    $knrsInKursuebersicht = $this->getKnrsInKursuebersicht();
    $knrsInBelegungen = \ArrayOperations::mapAttribut($this->getBelegungen(), 'knr');

    return empty(array_intersect($knrsInBelegungen, $knrsInKursuebersicht));
  }

  
  abstract protected function getBelegteKurseReiterButtons();

  protected function getButtons()
  {
    $buttonsObj = $this->getBelegteKurseReiterButtons();
    $buttonsArray = $buttonsObj->getButtons($this->isDatensatzLeer() == false);
    $selectionDependentButtons = array('Abmelden');
    $this->response->markierenButtons = $this->markierenButtonNotwendig($buttonsArray, $selectionDependentButtons);

    return $buttonsArray;
  }
}

class BelegteKurseRequest
{
  public $tnr;
  public $tguid;
  public $datumVon;
  public $datumBis;
  public $kursTitel;
  public $knrVon;
  public $knrBis;
  public $changedBelegungen;
}

class BelegteKurseResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $kurs;
  public $termine;
  public $columns;
  public $teilnehmer;

  
  
  public $reiterButtons;
  public $markierenButtons;
}