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

namespace Kufer\KuferTools\Dozent\KursBewerbung\BewerbungsFormular;

class BewerbungsFormularUseCase extends \Kufer\KuferTools\Basis\UseCase\ToolUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new BewerbungsFormularResponse());
  }

  public static function getToolId()
  {
    return 10;
  }

  public static function getToolSectionId()
  {
    return 582;
  }

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

    $alleIds = $this->getAllowedIds();

    return in_array($this->request->knr, $alleIds);
  }

  private function hatSichDerDozentBereitsBeworben()
  {
    $dbwDozBewerbung = new \DBWorkDozentenBewerbung(1, true);
    $dozentenbewerbungen = $dbwDozBewerbung->getBewerbungen4DozentAndKurs($this->getUser()->dnr, $this->request->knr);

    return count($dozentenbewerbungen) > 0;
  }

  public function getAllowedIds()
  {
    $kurshelper = \Kufer\KuferTools\Utils\DatamodulHelper\KursHelper\KursHelperFactory::getKursHelperByToolID($this->getToolId(), $this->toolSettings, $this->getUser());

    return $kurshelper->getIdsOhneFilter();
  }

  public function action()
  {
    $kurs = $this->getKurs();

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

  private function getResponse($kurs)
  {
    $this->handleResponseStrategies();
    $this->response->kurs = $kurs;

    $dozbewerbung = new \DozentenBewerbung();
    $dozbewerbung->kurs = $kurs;
    $this->response->dozbewerbung = $dozbewerbung;

    if ($this->hatSichDerDozentBereitsBeworben()) {
      $this->response->readonly = true;
      $this->response->statuscode = BewerbungAbsendenUseCase::ERROR_BEREITS_BEWORBEN;
    }


    return $this->response;
  }

  private function getKurs()
  {
    $kursHelper = \Kufer\KuferTools\Utils\DatamodulHelper\KursHelper\KursHelperFactory::getKursHelperByToolID($this->getToolId(), $this->getToolSectionId(), $this->getUser());

    return $kursHelper->getDatamodulById($this->request->knr);
  }

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

class BewerbungsFormularRequest
{
  public $knr = '';
}

class BewerbungsFormularResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $kurs;
  public $dozbewerbung;
  public $success;
  public $readonly = false;
  public $statuscode = '';
}