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

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

use Kufer\KuferTools\Utils\Hinterlegungen\HinterlegungJsHelper;

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

  public function action()
  {
    $dbwKurseTage = new \DBWorkKurseTage(1, true, true);
    $kurstag = $dbwKurseTage->getKurstag($this->request->ktIds[0]);

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

  
  private function getHlUhrzeiten4Js()
  {
    $hlUhrzeit = \HLDispatcher::GetHinterlegungClass(\HLDispatcher::HL_UHRZEITEN_DIALOG);

    return HinterlegungJsHelper::getHinterlegungMultiCol4JS($hlUhrzeit);
  }

  
  private function getHlKursorte4Js()
  {
    $hlKursorte = \HLDispatcher::GetHinterlegungClass(\HLDispatcher::HL_KURSORTE);

    return HinterlegungJsHelper::getHinterlegungSingleCol4JS($hlKursorte);
  }

  protected function getResponse($kurstag)
  {
    $this->handleResponseStrategies();
    $this->response->felder = $this->getFelder();
    $this->response->jsonHlUhrzeiten = $this->getHlUhrzeiten4Js();
    $this->response->jsonHlKursorte = $this->getHlKursorte4Js();
    $this->response->kurstag = $kurstag;
    $this->response->ktIds = implode(':', $this->request->ktIds);
    $this->response->ausfallOptions = \ComboboxAPI::getAusfallTool3($kurstag->ausfall);
    $this->response->dozentenOptions = \ComboboxAPI::getDozentenAuswahl4Kurs(-1, $kurstag->knr);

    return $this->response;
  }

  
  abstract protected function getFelderRechte(): array;

  
  private function getFelder()
  {
    $felder = array();
    $toolId = $this->getToolId();
    $felderRechte = $this->getFelderRechte();

    $felder['showDatum'] = isset($felderRechte['datum']) && \ToolsAPI::rechteOR($felderRechte['datum'], $toolId, true);

    
    $showBeginn = isset($felderRechte['beginn']) && \ToolsAPI::rechteOR($felderRechte['beginn'], $toolId, true);
    $showEnde = isset($felderRechte['ende']) && \ToolsAPI::rechteOR($felderRechte['ende'], $toolId, true);

    $felder['showBeginn'] = $showBeginn;
    $felder['showEnde'] = $showEnde;
    
    
    $felder['showMinuten'] = $showEnde && isset($felderRechte['minuten']) && \ToolsAPI::rechteOR($felderRechte['minuten'], $toolId, true);
    $felder['showPause'] = $showEnde && isset($felderRechte['pause']) && \ToolsAPI::rechteOR($felderRechte['pause'], $toolId, true);

    $felder['showAusfall'] = isset($felderRechte['ausfall']) && \ToolsAPI::rechteOR($felderRechte['ausfall'], $toolId, true);
    $felder['showKursort'] = isset($felderRechte['kursort']) && \ToolsAPI::rechteOR($felderRechte['kursort'], $toolId, true);
    $felder['showBemerkung'] = isset($felderRechte['bemerkung']) && \ToolsAPI::rechteOR($felderRechte['bemerkung'], $toolId, true);

    $felder['showDozent'] = isset($felderRechte['dozent']) && \ToolsAPI::rechteOR($felderRechte['dozent'], $toolId, true);

    return $felder;
  }

  
}

class TermineSammelAenderungRequest
{
  public $ktIds;
}

class TermineSammelAenderungResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $felder;
  public $jsonHlUhrzeiten;
  public $jsonHlKursorte;
  public $kurstag;
  public $ktIds;
  public $ausfallOptions;
  public $dozentenOptions;
}