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

namespace Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Termine\TerminBearbeiten;

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

  
  public function action()
  {
    $kurstag = $this->request->changedKurstag ?? $this->getKurstag();
    $hasRecht4KursAnpassen = $this->isAllowedToModifyKurs();
    $nichtPassendeKursdaten = array();
    if ($hasRecht4KursAnpassen && $this->request->pruefeObKursZuKurstagePasst) {
      $nichtPassendeKursdaten = \PasstKursZuKurstageAPI::passenKursdatenZuKurstagen($kurstag->knr);
      $rechte = $this->getRechte4KursBearbeiten();
      
      
      foreach ($nichtPassendeKursdaten as $key => $feld) {
        if (!isset($rechte[$feld['name']]) || !$rechte[$feld['name']]) {
          unset($nichtPassendeKursdaten[$key]);
        }
      }
    }

    return $this->getResponse($kurstag, $nichtPassendeKursdaten, $hasRecht4KursAnpassen);
  }

  
  abstract protected function getRechte4KursBearbeiten(): array;

  abstract protected function isAllowedToModifyKurs(): bool;

  protected function getUeberschrift(\Kurstag $pKurstag)
  {
    return $this->response->sprachSettings->Kurstag['Singular']['Nominativ'] . ' zu '
            . $this->response->sprachSettings->Kurs['Singular_mit_Artikel']['Dativ'] . ' ' . $pKurstag->knr . ': ' . $pKurstag->kurs->kurzbez;
  }

  
  protected function getResponse(
    \Kurstag $pKurstag,
    array $pNichtPassendeKursdaten = array(),
    bool $pHasRecht4KursAnpassen = false
  ): TerminBearbeitenFormularResponse {
    $this->handleResponseStrategies();
    $this->response->kurstag = $pKurstag;
    $this->response->kurs = $pKurstag->kurs;
    $this->response->ueberschrift = $this->getUeberschrift($pKurstag);
    $this->response->statusCode = $this->request->statusCode;
    $this->response->wrongFields = $this->request->wrongFields;
    $this->response->terminBearbeitet = $this->request->terminBearbeitet;
    
    $this->response->nichtPassendeKursdaten = array_values($pNichtPassendeKursdaten);
    $this->response->hasRecht4KursAnpassen = $pHasRecht4KursAnpassen;
    
    
    $this->response->kurstag->showRaumHinterlegungsButton = $this->toolSettings->hl_raum;

    $this->response->showInformiereTnDialog = false;
    $this->response->actionInformiereTnDialog = '';
    if (($this->toolSettings->terminAenderungMailAnTnDialog ?? false) && $this->request->terminBearbeitet) {
      $this->response->showInformiereTnDialog = true;
      $this->response->actionInformiereTnDialog = 'sammelEMailChangedKurstage';
    }

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

class TerminBearbeitenFormularRequest
{
  public $knr;
  public $ktId;
  public $statusCode;
  public $pruefeObKursZuKurstagePasst = false;
  public $terminBearbeitet = false;
  public $changedKurstag;
  public $wrongFields = array();
}

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