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

namespace Kufer\Web\KuferTools\Mitarbeiter\KursVorschlag\KursVorschlagBearbeiten;

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

  public static function getToolSectionId()
  {
    return 515;
  }

  public static function getToolId()
  {
    return \ToolsAPI::TOOL_KURSVORSCHLAG_MA;
  }

  public function hasAccess($pToolSectionId = null)
  {
    if (!parent::hasAccess()) {
      return false;
    } elseif (!in_array($this->request->kursplanungId, $this->getAlleIds())) {
      return false;
    } elseif (!\Kufer\Web\KuferTools\Utils\Kursplanung\KursplanungUtils::canMitarbeiterEditKursplanung($this->getUser(), $this->getToolId(), $this->getToolSectionId(), $this->getKursplanung())) {
      return false;
    }

    return true;
  }

  protected function getAlleIds()
  {
    $dbwKursPlanung = new \DBWorkKursplanung(1, true);

    return $dbwKursPlanung->getKursplanungenIds4Erfasser($this->getUser()->id);
  }

  protected function hideBackButton()
  {
    return true;
  }

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

  private function getResponse()
  {
    $this->handleResponseStrategies();
    $this->response->kursplanung = $this->getKursplanung();
    $this->response->kursplanung->showRaumHinterlegungsButton = $this->toolSettings->hl_raum;
    $this->response->kursplanung->toolId = $this->getToolId();
    if (\DBWorkBASysSettings::isSalzburgBildungswerk() || \DBWorkBASysSettings::isGarchingVhs()) {
      $this->response->kursplanung->backtoolid = 8;
      $this->response->kursplanung->backaction = 'kursvorschlaguebersicht';
      $this->response->readOnly = false;
    } else {
      $this->response->kursplanung->backtoolid = 41;
      $this->response->kursplanung->backaction = 'kursvorschlaguebersicht';
      $this->response->readOnly = !$this->isRechtAllowed('515.0.2');
    }
    $this->response->kursplanung->showAussenstellenHintelegungButton = $this->toolSettings->hl_aussenstelle;
    $this->response->kursplanung->showDauerHinterlegungsButton = $this->toolSettings->hl_dauer;
    $this->response->showButtonKursvorschlagBearbeitenSpeichern = $this->istZwischenspeichernErlaubt($this->response->kursplanung);

    return $this->response;
  }

  protected function istZwischenspeichernErlaubt($kursplanung)
  {
    if(\DBWorkBASysSettings::isSalzburgBildungswerk()) {
      return true;
    }

    if(!$this->toolSettings->kursvorschlagZwischenspeichernErlauben) {
      return false;
    }

    return $kursplanung->in_bearbeitung || $this->toolSettings->kursvorschlagZwischenspeichernErlaubenBeiBereitsAbgegebenenKursplanungen;
  }

  private function getKursplanung()
  {
    $dbwork = new \DBWorkKursplanung(1, true);

    return $dbwork->getKursplanungFromID($this->request->kursplanungId);
  }

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

class KursVorschlagBearbeitenFormularRequest
{
  public $kursplanungId = 0;
}

class KursVorschlagBearbeitenFormularResponse extends \Kufer\Web\KuferTools\Basis\UseCase\ToolResponse
{
  public $user;
  public $columns;
  public $menuPunkte;
  public $kursplanung;
  public $wrongFields;
  public $readOnly;
  public $showButtonKursvorschlagBearbeitenSpeichern;
  public $statusCodes = array();
}