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






class DataMenuAbmeldelink extends DataMenuMainTopLeft
{
  public $dbwBelegung;

  
  public function __construct($param)
  {
    parent::__construct($param);
    $this->exportadapter = new ExpKurse();
    $this->dbwBelegung = new DBWorkBelegung();
  }

  public function getsight($sightid = 808)
  {
    parent::getsight($sightid);
  }

  protected function innerContent(): void
  {
    $handled = false;
    if (!$this->is2ndStep() && intval($this->urlparameter->b) > 0) {
      $handled = $this->handleInfoPage();
    } elseif ($this->is2ndStep()) {
      
      if ($this->isStornoAllowed()) {
        $handled = $this->handleStorno();
      } else {
        $handled = $this->showNoStornoAllowed();
      }
    }
    if (!$handled) {
      $this->shownodata();
    }
  }

  
  private function is2ndStep(): bool
  {
    return intval($this->urlparameter->schritt) === 2;
  }

  
  private function handleInfoPage()
  {
    $kurs = $this->getKursInfo();
    if ($kurs === false) {
      \Logger::logg('Abmeldelink: konnte die Daten für die Infoseite nicht beschaffen (' . $this->getParamsForLogMessage() . ').', 2020);

      return false;
    }
    $this->dataarrayheader = array($kurs);

    $this->exportadapter->initiate();

    $actionUrlParam = clone $this->urlparameter;
    $actionUrlParam->schritt = 2;
    $action = $actionUrlParam->getStandardLink();
    $this->exportadapter->setSightInfo('action', $action);
    

    $content = $this->renderSightPart($this->sight->header, $this->exportadapter, $this->dataarrayheader);
    echo $content;

    return true;
  }

  private $kurs;

  private function getKursInfo()
  {
    if (!is_null($this->kurs)) {
      return $this->kurs;
    }
    $belegId = intval($this->urlparameter->b);
    

    $bel = null;
    
    

    
    if (is_null($bel) || is_null($bel->id) || is_null($bel->knr)) {
      
      try {
        $dmzInfo = \BelegungAPI::getBelegungsinformationen($belegId, true);
        $bel = JsonOperations::decode($dmzInfo->reason, false, 512, 0, true);
      } catch (\Exception $e) {
        \Logger::logg('Abmeldelink: Abruf der Belegung per DMZ nicht möglich (' . $belegId . ').', 5505);

        return false;
      }
      if ($bel->Belid == '-1' || $bel->Knr == '') {
        
        return false;
      }
    }
    $kurs = \WBKursStore::getKurs($bel->Knr);
    if ($kurs->isEmpty()) {
      
      try {
        $kurs = \Kufer\Web\Classes\Addfunctions\KursOperations::getKursFromDMZ($bel->Knr, true);
      } catch (\Exception $e) {
        \Logger::logg('Abmeldelink: Abruf des Kurses per DMZ nicht möglich (' . $belegId . ').', 5505);

        return false;
      }
      if ($kurs->isEmpty()) {
        return false;
      }
    }

    $this->kurs = $kurs;

    return $kurs;
  }

  private function getParamsForLogMessage()
  {
    return 'belegid: ' . $this->urlparameter->b . ' hash: ' . $this->urlparameter->h;
  }

  private function isStornoAllowed()
  {
    
    

    
    $kurs = $this->getKursInfo();
    if ($kurs === false) {
      return false;
    }
    $testTime = \DateTimeObj::getNow();
    
    $testTime = $testTime->addHours(24 * 7);

    return !$kurs->isKursBeginnUhrzeitErreicht($testTime);
  }

  private function handleStorno()
  {
    try {
      $statusUndMeldung = \BelegungAPI::storniereBelegungPerHashDmz($this->urlparameter->b, $this->urlparameter->h);
      $statusCode = $statusUndMeldung['statuscode'];
      $meldung = $statusUndMeldung['logmeldung'];

      if (in_array($statusCode, array(
        \StornierePerHashStatus::FEHLER_BELEGUNG_BEREITS_STORNIERT,
        \StornierePerHashStatus::BELEGUNG_STORNIERT_WEBPLATTFORMEN_NICHT,
        \StornierePerHashStatus::BELEGUNG_STORNIERT_WEBPLATTFORMEN_TEILWEISE,
        \StornierePerHashStatus::KOMPLETT_ERFOLGREICH))) {
        
        
        $kurs = $this->getKursInfo();
        $this->dataarrayfooter = array($kurs);
        $this->showfooter();
        \Logger::logg('Abmeldelink Erfolgreich: Statuscode ' . $statusCode . ', Parameter: ' . $this->getParamsForLogMessage() . ', Meldung: ' . $meldung, 2020);
      } else {
        $kurs = $this->getKursInfo();
        $this->dataarraynocolumn = array($kurs);
        $this->shownocolumn();
        \Logger::logg('Abmeldelink nicht erfolgreich: Statuscode ' . $statusCode . ', Parameter: ' . $this->getParamsForLogMessage() . ', Meldung: ' . $meldung, 2020);
      }
    } catch(\Exception $e) {
      \Logger::logg('Abmeldelink: Fehler beim Stornieren per BAS_DMZ (' . $this->getParamsForLogMessage() . ').', 2020);
      $kurs = $this->getKursInfo();
      $this->dataarraynocolumn = array($kurs);
      $this->shownocolumn();
    }

    return true;
  }

  private function showNoStornoAllowed()
  {
    $kurs = $this->getKursInfo();
    if ($kurs === false) {
      \Logger::logg('Abmeldelink: konnte die Daten für die Infoseite nicht beschaffen (' . $this->getParamsForLogMessage() . ').', 2020);

      return false;
    }
    $this->dataarraybody = array($kurs);

    $this->exportadapter->initiate();
    

    $content = $this->renderSightPart($this->sight->body, $this->exportadapter, $this->dataarraybody);
    echo $content;

    return true;
  }
}