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

namespace Kufer\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Teilnehmer\HandleAnmeldungByMv\AnmAblehnen;

use Kufer\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Teilnehmer\HandleAnmeldungByMv;

class AnmAblehnenUseCase extends HandleAnmeldungByMv\handleAnmeldungByMvUseCase
{
  protected function getNewStatus()
  {
    return 'X';
  }

  protected function changeStatusDMZ($belegungen, $resultObj)
  {
    try {
      $abgleichApiResult = \BelegungAPI::belegungStatusAendernEinfachDMZ($belegungen, $this->getNewStatus(), false);
      $resultObj = $this->setAbgleichApiResultToResultObj($abgleichApiResult, $resultObj, $belegungen);
    } catch (\AbgleichApiException $aae) {
      \Logger::logg('Fehler beim aendern einer Anmeldung zu Status ' . $this->getNewStatus() . ': ' . $aae);
      $resultObj->technischerFehler = true;
    } catch (\Exception $e) {
      \Logger::logg('Fehler beim aendern einer Anmeldung zu Status ' . $this->getNewStatus() . ': ' . $e);
      $resultObj->technischerFehler = true;
    }

    return $resultObj;
  }

  protected function changeStatusWeb($belegungen)
  {
    foreach ($belegungen as $belegung) {
      $firmabelegungen = $this->dbwBelegung->getFirmaBelegungenByTeilnehmerBelegung($belegung);
      if (count($firmabelegungen) > 0) {
        $this->dbwBelegung->fillBelegung4StatusAendern($firmabelegungen[0], 'F', false);
        $firmazahlung = \ZahlungAPI::getZahlungen4BelegungStatusAendernEinfach($firmabelegungen[0], 'F');
        $this->dbwBelegung->doStatusAendern($firmabelegungen[0], $firmazahlung, array());
      }

      $this->dbwBelegung->fillBelegung4StatusAendern($belegung, $this->getNewStatus(), false);
      $zahlung = \ZahlungAPI::getZahlungen4BelegungStatusAendernEinfach($belegung, $this->getNewStatus());
      $this->dbwBelegung->doStatusAendern($belegung, $zahlung, array());
    }
  }

  protected function getMailPresenterInstanceFunction()
  {
    return function($emailData) {
      return new HandleAnmeldungByMv\MailBestaetigung\Ablehnen\HandleMailBestaetigungAblehnenPresenter($emailData);
    };
  }

  protected function getStatusMessageHandler()
  {
    return new HandleAnmeldungByMv\StatusMessage\HandleStatusMessageAblehnen();
  }
}