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

namespace Kufer\Web\KuferTools\Basis\NachlassDialog;

abstract class NachlassDialogUseCase extends \Kufer\Web\KuferTools\Basis\UseCase\EinzelKursUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new NachlassDialogResponse());
  }

  public function hasAccess($pToolsectionId = null)
  {
    if (!\CleanOperations::isInt($this->request->belid)) {
      return false;
    }

    if (!parent::hasAccess($pToolsectionId)) {
      return false;
    }

    return true;
  }

  abstract protected function getFormularAction();

  public function action()
  {
    return $this->getResponse();
  }

  protected function getRequestedId()
  {
    return $this->request->belid;
  }

  private $belegung;

  protected function getBelegung(): \Belegung
  {
    if (is_null($this->belegung)) {
      $this->belegung = \DBWorkBelegung::getDefaultInstance()->getBelegung($this->getRequestedId());
    }

    return $this->belegung;
  }

  protected function getKursId(): string
  {
    return $this->getBelegung()->getKurs()->id;
  }

  protected function getAllowedIds()
  {
    return $this->getBelegungsHelper($this->getKurs($this->getKursId()))->getIdsOhneFilter();
  }

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

  protected function getResponse()
  {
    $hlAnmBemerkung = new \HinterlegungAnmBemerkung();
    $hlAnmBemerkung->fields = array('grund');
    $this->response->hlbemerkung = $hlAnmBemerkung;
    $this->response->action = $this->getFormularAction();
    $belegung = $this->getBelegung();
    $this->response->belegung = $belegung;
    $this->response->isKind = $belegung->isKind() && $belegung->getKurs()->typ !== 'K';

    return $this->response;
  }
}

class NachlassDialogRequest
{
  public $belid;
  public $knr;
}

class NachlassDialogResponse extends \Kufer\Web\KuferTools\Basis\UseCase\ToolResponse
{
  public $hlbemerkung;
  public $action;
  public $belegung;
  public $isKind;
}