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

namespace Kufer\Web\KuferTools\Dozent\Kursplanung\TermineLoeschen;

use Kufer\Web\KuferTools\Basis\BenachrichtigungNachBearbeiten\BenachrichtigungUtils;

class TermineLoeschenUseCase extends \Kufer\Web\KuferTools\Basis\Kursdetails\Detailsreiter\Termine\TermineLoeschen\TermineLoeschenUseCase
{
  public static function getToolSectionId()
  {
    return 9;
  }

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

  public function hasAccess($pToolsectionId = null)
  {
    if (!parent::hasAccess($pToolsectionId)) {
      return false;
    }

    if (!$this->request->isXsrfOk && !$this->request->isRefresh) {
      return false;
    }

    if (!$this->isRechtAllowed('9.0.2') || !$this->isRechtAllowed('10.0.5')) {
      return false;
    }

    if (!$this->request->isRefresh && !$this->hatDozentZugriffAufKurstage($this->request->ktIds)) {
      return false;
    }

    return true;
  }

  private function hatDozentZugriffAufKurstage($kurstagIds)
  {
    $kursHelper = new \Kufer\Web\KuferTools\Utils\DatamodulHelper\Kurse\DozentenKurse($this->toolSettings, $this->getUser(), $this->getUser()->dnr);
    $kursnummern = $kursHelper->getIdsOhneFilter();

    $kurstage = $this->getKurstage();
    if (count($kurstage) !== count($kurstagIds)) {
      return false;
    }

    return \ArrayOperations::all($kurstage, function($kt) use ($kursnummern) {
      return in_array($kt->knr, $kursnummern);
    });
  }

  
  private function getChangedKurstage(array $pKurstage): array
  {
    $dbwKursTage = new \DBWorkKurseTage(1, true, true);

    $changedKurstage = array();
    foreach ($pKurstage as $kurstag) {
      $changedKurstag = $dbwKursTage->getNewObject();
      $changedKurstag->id = $kurstag->id;
      $changedKurstag->knr = $kurstag->knr;
      $changedKurstag->kurs = $kurstag->kurs;
      $changedKurstag->dnr = $kurstag->dnr;

      $changedKurstage[] = $changedKurstag;
    }

    return $changedKurstage;
  }

  protected function sendeBenachrichtigungEmailTermindaten(array $pOrigKurstage): void
  {
    $changedKurstage = $this->getChangedKurstage($pOrigKurstage);
    $user = $this->getUser();
    $changedFieldsLabels = array('datum' => 'Datum', 'ue' => 'UE', 'zeit_beg' => 'Beginn', 'zeit_ende' => 'Ende',
      'ausfall' => 'Status', 'ort' => 'Kursort', 'bemerkungen' => 'Bemerkung');
    $changedFields = array_keys($changedFieldsLabels);

    $footerText = 'Termin Löschen';
    BenachrichtigungUtils::sendeBenachrichtigungEmailTermindaten(
      array(),
      $pOrigKurstage[0]->kurs,
      $pOrigKurstage,
      $changedKurstage,
      $changedFields,
      $changedFieldsLabels,
      $footerText,
      $user,
      $this->toolSettings,
      $this->getToolId(),
      $this->getToolSectionId()
    );
  }

  protected function setSessionVarsForMailAnTn(array $pKurstage): void
  {
    
  }
}