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

namespace Kufer\Web\KuferTools\Dozent\KursUebersicht\Detailsreiter\Termine\TermineLoeschen;

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

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

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

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

    if (!$this->isRechtAllowed('4.0.3') || !$this->isRechtAllowed('334.1.3')) { 
      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);
    });
  }

  protected function postSuccessTerminLoeschen(array $kurstage, array $altPasstKursZuKurstage): ?int
  {
    $neuPasstKursZuKurstage = \PasstKursZuKurstageAPI::passenKursdatenZuKurstagen($kurstage[0]->knr);
    if (!\PasstKursZuKurstageAPI::autoAnpassenKursdatenZuKurstagen($kurstage[0]->getKurs(), $altPasstKursZuKurstage, $neuPasstKursZuKurstage)) {
      return self::ERROR_TERMINE_UEBERTRAGUNG;
    }

    return null;
  }
}