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

namespace Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Teilnehmer;

abstract class TeilnehmerUseCase extends \Kufer\Web\KuferTools\Basis\UseCase\EinzelKursUseCase
{
  abstract protected function getMainReiterId();

  public function hasAccess($pToolSectionId = null)
  {
    
    if (!parent::hasAccess()) {
      return false;
    }
    
    if (!$this->isRechtAllowed($this->getMainReiterId() . '.1.' . $this->getMainReiterIdSection())) {
      return false;
    }

    return true;
  }

  protected function getMainReiterIdSection(): int
  {
    return 4;
  }

  public function action()
  {
    $kurs = $this->getKurs($this->request->knr);
    $belegungen = $this->getBelegungen($kurs);
    $belegungenOhneFilter = $this->getBelegungenOhneFilter($kurs);

    return $this->getResponse($kurs, $belegungen, $belegungenOhneFilter);
  }

  protected function getBelegungsHelper(\Kurs $kurs): \Kufer\Web\KuferTools\Utils\DatamodulHelper\Belegungen\BelegungsHelper
  {
    return new \Kufer\Web\KuferTools\Utils\DatamodulHelper\Belegungen\ReiterTeilnehmerBelegungen(
      $this->toolSettings,
      $this->request,
      $kurs->id,
      \ToolSettingsAPI::getToolSettings(0)->allowKinder5InTeilnehmerReiter ?? false
    );
  }

  
  private function getBelegungen($kurs)
  {
    $belegungshelper = $this->getBelegungsHelper($kurs);
    $belegungen = $belegungshelper->getDatamoduleMitFilter($this->getToolId());

    
    
    $persErweiterungStrategy = new \Kufer\Web\KuferTools\Utils\PersonenErweiternStrategies\ErweitereBelegungenStrategy();

    return $persErweiterungStrategy->fillAll($belegungen, $this->getToolId(), $this->request->knr);
  }

  
  private function getBelegungenOhneFilter($kurs)
  {
    $belegungshelper = $this->getBelegungsHelper($kurs);
    $belegungen = $belegungshelper->getDatamoduleOhneFilter();

    
    
    $persErweiterungStrategy = new \Kufer\Web\KuferTools\Utils\PersonenErweiternStrategies\ErweitereBelegungenStrategy();

    return $persErweiterungStrategy->fillAll($belegungen, $this->getToolId(), $this->request->knr);
  }

  protected function getResponse($kurs, $belegungen, $belegungenOhneFilter)
  {
    $this->handleResponseStrategies();
    $this->response->kurs = $kurs;
    $this->response->belegungen = $belegungen;
    $this->response->belegungenOhneFilter = $belegungenOhneFilter;
    $this->response->reiterButtons = $this->getButtons();
    $this->response->showTnPictures = $this->toolSettings->showTnPictures ?? false;

    return $this->response;
  }

  
  abstract protected function getButtons();

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

class TeilnehmerRequest
{
  public $knr;
  public $tnStatus;
  public $tnMobil;
  public $tnTelefon;
  public $tnTelMobil;
  public $tnEmail;
}

class TeilnehmerResponse extends \Kufer\Web\KuferTools\Basis\UseCase\ToolResponse
{
  public $kurs;
  public $belegungen;
  public $belegungenOhneFilter;
  public $columns;
  public $reiterButtons;
  public $markierenButtons;
  public $showTnPictures;
}