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

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

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

  public static function getToolSectionId()
  {
    return 630;
  }

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

  public function action()
  {
    $result = $this->handleAjaxUmOrWeitermeldenTN($this->request->action);

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

  
  private function handleAjaxUmOrWeitermeldenTN($pAction)
  {
    $anmeldeKurs = $this->request->anmeldeKurs;
    $knr = $this->request->knr;
    $xsrfKey = $this->request->xsrfKey;
    $belegIds = $this->request->belegIds;

    
    
    $dbwTeiln = new \DBWorkTeilnehmer();
    
    
    $dbwBelegung = \DBWorkBelegung::getDefaultInstance();

    $alterKursHatAboGebuehren = false;
    if (\APIGebuehren::hasKursFortlaufendeGebuehren($knr)) {
      $alterKursHatAboGebuehren = true;
    }
    $neuerKursHatAboGebuehren = false;
    if (\APIGebuehren::hasKursFortlaufendeGebuehren($anmeldeKurs)) {
      $neuerKursHatAboGebuehren = true;
    }
    $kurseInfosAry = array('alterKursHatAboGebuehren' => $alterKursHatAboGebuehren, 'neuerKursHatAboGebuehren' => $neuerKursHatAboGebuehren);

    $tnObjAry = array();
    
    foreach ($belegIds as $belId) {
      
      $teilnehmer = $dbwTeiln->getTeilnehmByBelegung($belId);
      
      $isInAnmeldeKurs = false;
      $belegungen4TN = $dbwBelegung->getBelegungenbyKursTeilnehmerNR($anmeldeKurs, $teilnehmer->id);
      if (count($belegungen4TN) > 0) {
        
        foreach ($belegungen4TN as $beleg4TN) {
          $belstatus = $beleg4TN->status;
          if ($belstatus == '' || $belstatus == ' ' || $belstatus == 'A' || $belstatus == 'T' || $belstatus == 'P' || $belstatus == 'U') {
            $isInAnmeldeKurs = true;
            break;
          }
        }
      }

      
      $gebuehr = \APIGebuehren::getGebuehren($teilnehmer->id, $anmeldeKurs);
      
      
      $tnObj = array('id' => $teilnehmer->id, 'name' => $teilnehmer->name, 'vorname' => $teilnehmer->vorname, 'strasse' => $teilnehmer->strasse,
          'ort' => $teilnehmer->ort, 'isInAnmeldeKurs' => $isInAnmeldeKurs, 'gebuehr' => $gebuehr, 'vonBelegId' => $belId, 'eintritt' => '');
      
      if ($pAction === 'handleTnWeitermeldung') {
        $newLetterAry = array('newsLetter' => ($teilnehmer->newsl_erlaubt === 'J'),
                              'newsLetterAllow' => $teilnehmer->newsl_erlaubt);
        $tnObj = array_merge($tnObj, $newLetterAry);
      } elseif ($pAction === 'handleTnUmmeldung') {
        $tnObj['austritt'] = '';
      }
      $tnObjAry[] = $tnObj;
    }
    
    $resultAry = array(
        'stornoShowAustrittFeld' => (bool)$this->toolSettings->stornoShowAustrittFeld,
        'teilnehmer' => $tnObjAry,
        'kurseInfos' => $kurseInfosAry,
        'xsrf' => $xsrfKey
    );

    return \JsonOperations::encode4Ajax($resultAry);
  }

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

    return $this->response;
  }
}

class HandleTnUmOrWeitermeldenRequest
{
  public $action;
  public $anmeldeKurs;
  public $belegIds;
  public $knr;
  public $xsrfKey;
}

class HandleTnUmOrWeitermeldenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $result;
}