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

namespace Kufer\KuferTools\Basis\Kursdetails\DetailsReiter\Termine\TerminBearbeiten;

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

  
  public function action()
  {
    if (isset($this->request->changedKurstag) && !\is_null($this->request->changedKurstag)) {
      $kurstag = $this->request->changedKurstag;
    } else {
      $kurstag = $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($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($pKurstag, $pNichtPassendeKursdaten = array(), $pHasRecht4KursAnpassen = false)
  {
    $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->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 && $this->request->terminBearbeitet) {
      $this->response->showInformiereTnDialog = true;
      $this->response->actionInformiereTnDialog = 'sammelEMailChangedKurstage';
    }

    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 $terminBearbeitet = false;
  public $actionInformiereTnDialog;
}

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