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

namespace Kufer\KuferTools\Veranstalter\KursUebersicht\Detailsreiter\Teilnehmer\HandleAbmeldung;

class HandleAbmeldungUseCase extends \Kufer\KuferTools\Basis\UseCase\ToolUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new HandleAbmeldungResponse());
  }

  public static function getToolSectionId()
  {
    return 630;
  }

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

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

  public function action()
  {
    $dbwBelegung = new \DBWorkBelegung(1, true);
    $belegungen = $dbwBelegung->getBelegungenByIds($this->request->belegungIdsToStorno);
    $changedBelegungen = $this->handleStorno($belegungen);

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

  
  private function handleStorno($pBelegungAry)
  {
    $successBelgungenDirektOrDMZ = array();
    $successBelgungenEmail = array();
    $errorBelegungen = array();
    $austritt = null;
    foreach ($pBelegungAry as $pBelegung) {
      $stornoGrund = \PostOperations::getVarValue('storno_grund_' . $pBelegung->id, '');
      if (\APIGebuehren::hasKursFortlaufendeGebuehren($pBelegung->knr)) {
        $austritt = \PostOperations::getVarValue('austritt_' . $pBelegung->id, '');
        $success = \StornoAPI::handleStornoKursMitAboGebuehr($pBelegung, $stornoGrund, $austritt);
      } else {
        $status = \PostOperations::getVarValue('storno_status_' . $pBelegung->id, 'S');
        if ($this->toolSettings->stornoShowAustrittFeld) {
          $austritt = \PostOperations::getVarValue('austritt_' . $pBelegung->id, '');
        }
        $mailAddress = \EmailOperations::getToolEmailAddressForVhs($this->toolSettings->vhsEmailTool8Section242);
        $success = \StornoAPI::handleStorno($mailAddress, $pBelegung, $this->response->sprachSettings, $status, $stornoGrund, $this->toolSettings, $austritt);
      }

      if ($success === \StornoAPI::SEND_SUCCESSFUL_PER_DIREKT || $success === \StornoAPI::SEND_SUCCESSFUL_PER_DMZ) {
        $successBelgungenDirektOrDMZ[] = $pBelegung;
      } elseif ($success === \StornoAPI::SEND_SUCCESSFUL_PER_EMAIL) {
        $successBelgungenEmail[] = $pBelegung;
      } else { 
        $errorBelegungen[] = $pBelegung;
      }
    }
    $changedBelegungen['successBelgungenDirektOrDMZ'] = $successBelgungenDirektOrDMZ;
    $changedBelegungen['successEmail'] = $successBelgungenEmail;
    $changedBelegungen['error'] = $errorBelegungen;

    return $changedBelegungen;
  }

  protected function getResponse($changedBelegungen)
  {
    $this->response->changedBelegungen = $changedBelegungen;

    return $this->response;
  }
}

class HandleAbmeldungRequest
{
  public $belegungIdsToStorno;
  public $knr;
}

class HandleAbmeldungResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $changedBelegungen;
}