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

namespace Kufer\Web\KuferTools\Dozent\Kursplanung\KursBearbeiten;

use Kufer\Web\KuferTools\Utils\Dozent\KursBearbeitenPlanungUtils;


class KursBearbeitenUseCase extends \Kufer\Web\KuferTools\Dozent\Kursplanung\EinzelKursUseCase
{
  public function __construct($request, $response = null)
  {
    parent::__construct($request, $response ?? new KursBearbeitenResponse());
  }

  public static function getToolSectionId()
  {
    return 11;
  }

  public function hasAccess($pToolSectionId = null)
  {
    
    $accessZurToolSection = parent::hasAccess();
    if (!$accessZurToolSection) {
      return false;
    }
    
    if (!$this->isRechtAllowed('9.0.1')) {
      return false;
    }

    $kurs = $this->getKurs($this->request->knr);
    if (!$this->isKursBearbeitbar($kurs)) {
      header('Location: index.php?tool_id=3&kurs_nicht_bearbeitbar=1');
      die();
    }

    return true;
  }

  protected function isKursBearbeitbar(\Kurs $kurs): bool
  {
    return KursBearbeitenPlanungUtils::isKursBearbeitbar(
      $this->toolSettings->kursstatusKursIstBearbeitbar,
      $this->toolSettings->kursstatusKursIstNichtBearbeitbar,
      $this->toolSettings->kursstatusKursInPlanung,
      $kurs
    );
  }

  
  public function action()
  {
    $user = $this->getUser();
    if (is_null($this->request->changedKurs)) {
      $kurs = $this->getKurs($this->request->knr);
    } else {
      $kurs = $this->request->changedKurs;
    }
    $columns = $this->getColumns($this->toolSettings);

    return $this->getResponse($kurs, $user, $columns);
  }

  
  protected function getResponse($kurs, $user, $columns)
  {
    $this->handleResponseStrategies();
    $this->response->kurs = $kurs;
    $this->response->kurs->showRaumHinterlegungsButton = $this->toolSettings->kurse_hl_raum;
    $this->response->kurs->showDauerHinterlegungsButton = $this->toolSettings->kurse_hl_dauer;
    $this->response->kurs->showBeginnHinterlegungsButton = $this->toolSettings->kurse_hl_beginn;
    $this->response->kurs->showEndeHinterlegungsButton = $this->toolSettings->kurse_hl_ende;
    $this->response->kurs->showAussenstellenHintelegungButton = $this->toolSettings->kurse_hl_aussenstelle;
    $this->response->kurs->kursortFeldReadonly = $this->toolSettings->kurse_kursort_feld_readonly;
    $this->response->kursortEinschraenkungAussenstelle = $this->toolSettings->kurse_kursort_einschraenkung_aussenstelle;
    $this->response->statusCode = $this->request->statusCode;
    $this->response->wrongFields = $this->request->wrongFields;

    return $this->response;
  }

  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)
    );
  }

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

class KursBearbeitenRequest
{
  public $knr;
  public $statusCode;
  public $wrongFields;
  public $changedKurs;
}

class KursBearbeitenResponse extends \Kufer\Web\KuferTools\Basis\UseCase\ToolResponse
{
  public $kurs = array();
  public $user;
  public $columns;
  public $menuPunkte;
  public $statusCode;
  public $wrongFields;
  public $kursortEinschraenkungAussenstelle;
}