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

namespace Kufer\KuferTools\Basis\KursDetails\KursausfallSetzen;


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

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

    return true;
  }

  public function action()
  {
    $kurs = $this->getKurs($this->request->knr);
    $settings = $this->getSettings();

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

  
  protected function getResponse($pKurs, $pSettings)
  {
    $this->response->kurs = $pKurs;
    $this->response->raumFreigebenChecked = $pSettings->kursausfallRaumFreigeben;
    $this->response->raumFreigebenDisabled = !$this->toolSettings->raumfreigeben_bearbeitbar;
    $this->response->ktLoeschenDisabled = !$pSettings->kursausfallRaumFreigeben || !$this->toolSettings->kurstageloeschen_bearbeitbar;
    $this->response->ktLoeschenAlleChecked = $pSettings->kursausfallKurstageLoeschen == '';
    $this->response->ktLoeschenAlleBisAufErstenChecked = $pSettings->kursausfallKurstageLoeschen == '1';
    $this->response->ktLoeschenKeineChecked = $pSettings->kursausfallKurstageLoeschen == '2';
    $this->response->medienLoeschenChecked = $pSettings->kursausfallMedienLoeschen;
    $this->response->ausfallgrundClass = $this->isAusfallgrundPflichtfeld() ? 'form_mandatory' : '';
    $this->response->raumFreigebenClass = $this->getRaumFreigebenClass();
    $this->response->ausfallgrund = $pKurs->zusatztexte->stornogrund;
    $this->response->benachrichtigungTnChecked = $pSettings->kursausfallBenachrichtigungAnTns;
    $this->response->benachrichtigungTnDisabled = !$this->toolSettings->benachrichtigungTn_bearbeitbar;

    $this->handleResponseStrategies();

    return $this->response;
  }

  
  protected function getSettingsHLGrundsys()
  {
    $dbwHlGrundSys = \DBWorkHLGrundSys::getDefaultInstance(1, true);

    return $dbwHlGrundSys->getSettingsAry(array('AusfallgrundSetzen'));
  }

  
  protected function getSettings()
  {
    $dbwBASysSettings = \DBWorkBASysSettings::getDefaultInstance(1, true);

    return $dbwBASysSettings->getSettings();
  }

  private function getRaumFreigebenClass()
  {
    $class = '';
    if ($this->toolSettings->kurstageloeschen_bearbeitbar && $this->toolSettings->raumfreigeben_bearbeitbar) {
      $class = 'raum_freigeben';
    }

    return $class;
  }

  
  protected function isAusfallgrundPflichtfeld()
  {
    $settings = $this->getSettingsHLGrundsys();

    return $settings['AusfallgrundSetzen'] !== false && $settings['AusfallgrundSetzen']->wert === 'W';
  }

  protected function isKursAufAusfall()
  {
    $kurs = $this->getKurs($this->request->knr);

    return $kurs->ausfall;
  }
}

class KursausfallSetzenDialogRequest
{
  public $knr;
}

class KursausfallSetzenDialogResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $kurs;
  
  public $raumFreigebenChecked;
  public $raumFreigebenDisabled;
  public $raumFreigebenClass;
  public $ktLoeschenDisabled;
  public $ktLoeschenAlleChecked;
  public $ktLoeschenAlleBisAufErstenChecked;
  public $ktLoeschenKeineChecked;
  public $medienLoeschenChecked;
  public $ausfallgrundClass;
  public $ausfallgrund;
  public $benachrichtigungTnChecked;
  public $benachrichtigungTnDisabled;
}