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

namespace Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Dokumente\DokumenteUpload;

abstract class DokumenteUploadFormularUseCase extends \Kufer\Web\KuferTools\Basis\UseCase\EinzelKursUseCase
{
  public function __construct($request, $response = null)
  {
    parent::__construct($request, $response ?? new DokumenteUploadFormularResponse());
  }

  public function hasAccess($pToolSectionId = null)
  {
    if (!parent::hasAccess()) {
      return false;
    }

    return true;
  }

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

  protected function getResponse()
  {
    $this->handleResponseStrategies();
    $this->response->kurs = $this->getKurs($this->getKursId());

    $dbwTools = \DBWorkTools::getDefaultInstance();
    $this->response->allowFirmen = $this->allowAccessForFirmen()
      && $dbwTools->isToolAllowed(null, \ToolsAPI::TOOL_KURSUEBERSICHT_FA);
    $this->response->allowFirmenDefaultValue = $this->allowAccessForFirmenDefaultValue();
    $this->response->allowTeilnehmer = $this->allowAccessForTeilnehmer()
      && $dbwTools->isToolAllowed(null, \ToolsAPI::TOOL_TN);
    $this->response->allowTeilnehmerDefaultValue = $this->allowAccessForTeilnehmerDefaultValue();

    return $this->response;
  }

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

  protected function allowAccessForFirmen(): bool
  {
    return false;
  }

  protected function allowAccessForFirmenDefaultValue(): bool
  {
    return false;
  }

  protected function allowAccessForTeilnehmer(): bool
  {
    return false;
  }

  protected function allowAccessForTeilnehmerDefaultValue(): bool
  {
    return false;
  }
}

class DokumenteUploadFormularResponse extends \Kufer\Web\KuferTools\Basis\UseCase\ToolResponse
{
  public $user;
  public $menuPunkte = array();
  
  public $kurs;

  
  public $allowFirmen;

  
  public $allowFirmenDefaultValue;

  
  public $allowTeilnehmer;

  
  public $allowTeilnehmerDefaultValue;
}