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

namespace Kufer\KuferTools\Dozent\Kursplanung\TerminBearbeiten;

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


class TerminBearbeitenFormularUseCase extends \Kufer\KuferTools\Dozent\Kursplanung\EinzelKursUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new TerminBearbeitenFormularResponse());
  }

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

  public static function getToolSectionId()
  {
    return 281;
  }

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

    if ($kurstag->nodoztool) {
      return false;
    }

    $user = $this->getUser();
    if ($kurstag->dnr != $user->dnr) {
      return false;
    }

    if (!KursBearbeitenPlanungUtils::isTerminBearbeitbar(
      $this->toolSettings->kursstatusKursIstBearbeitbar,
      $this->toolSettings->kursstatusKursIstNichtBearbeitbar,
      $this->toolSettings->kursstatusKursInPlanung,
      $kurstag->getKurs()
    )) {
      return false;
    }

    return true;
  }

  

  protected function getKnr()
  {
    return $this->getKurstag()->knr;
  }

  
  public function action()
  {
    if (isset($this->request->changedKurstag) && !\is_null($this->request->changedKurstag)) {
      $kurstag = $this->request->changedKurstag;
    } else {
      $kurstag = $this->getKurstag();
    }

    if ($this->request->pruefeObKursZuKurstagePasst) {
      $nichtPassendeKursdaten = \PasstKursZuKurstageAPI::passenKursdatenZuKurstagen($kurstag->knr);
      $rechte = \PasstKursZuKurstageAPI::getRechte4KursBearbeitenDozent($this->getToolId(), $this->getUser());
      foreach ($nichtPassendeKursdaten as $key => $feld) {
        if (!isset($rechte[$feld['name']]) || !$rechte[$feld['name']]) {
          unset($nichtPassendeKursdaten[$key]);
        }
      }
      
      $this->response->nichtPassendeKursdaten = array_values($nichtPassendeKursdaten);
    }

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

  private function getKurstag()
  {
    $kurstag = null;
    if (is_null($kurstag)) {
      $dbw = new \DBWorkKurseTageWT(1, true);
      $kurstag = $dbw->getKurstag($this->request->ktId, true);
    }

    return $kurstag;
  }

  
  protected function getResponse($pKurstag)
  {
    $this->handleResponseStrategies();
    $this->response->kurstag = $pKurstag;
    $this->response->kurs = $pKurstag->kurs;
    $this->response->statusCode = $this->request->statusCode;
    $this->response->wrongFields = $this->request->wrongFields ?? array();
    $this->response->kurstag->showRaumHinterlegungsButton = $this->toolSettings->hl_raum;

    return $this->response;
  }

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

class TerminBearbeitenFormularRequest
{
  public $knr;
  public $ktId;
  public $statusCode;
  public $pruefeObKursZuKurstagePasst = false;
  public $wrongFields;
  public $changedKurstag;
}

class TerminBearbeitenFormularResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $kurstag;
  public $kurs;
  public $user;
  public $columns;
  public $menuPunkte;
  public $statusCode;
  public $nichtPassendeKursdaten = array();
  public $wrongFields;
}