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

namespace Kufer\KuferTools\Mitarbeiter\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 377;
  }

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

  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();

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

    $anmeldeKursObj = $this->getKursDataByDMZ($anmeldeKurs);
    $freiePlaetzeAnmeldeKurs = $anmeldeKursObj->getVarValue('teil_frei');

    $tnObjAry = array();
    
    foreach ($belegIds as $belId) {
      $teilnehmer = $dbwTeiln->getTeilnehmByBelegung($belId);
      $isInAnmeldeKurs = $this->isTnInAnmeldeKurs($anmeldeKurs, $teilnehmer->id);

      
      if ($pAction === 'handleTnWeitermeldung') {
        
        $newsLetter = false;
        
        $newsLetterAllow = $teilnehmer->newsl_erlaubt;
        
        if ($teilnehmer->newsl_erlaubt === 'J') { 
          $newsLetter = true;
        }
      }

      if ($pAction === 'handleTnWeitermeldung') {
        $status = 'W';
        $gebuehr = 0;
        if ($freiePlaetzeAnmeldeKurs > 0) {
          $freiePlaetzeAnmeldeKurs -= 1;
          $status = 'A';
          $gebuehr = \APIGebuehren::getGebuehren($teilnehmer->id, $anmeldeKurs);
        }
      } else {
        $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') {
        
        $weitermeldenTnObjAry = array('newsLetter' => $newsLetter, 'newsLetterAllow' => $newsLetterAllow, 'status' => $status);
        $tnObj = array_merge($tnObj, $weitermeldenTnObjAry);
      } elseif ($pAction === 'handleTnUmmeldung') {
        $tnObj['austritt'] = '';
      }
      $tnObjAry[] = $tnObj;
    }
    
    $resultAry = array(
        'stornoShowAustrittFeld' => (bool)$this->toolSettings->stornoShowAustrittFeld,
        'teilnehmer' => $tnObjAry,
        'kurseInfos' => $kurseInfosAry,
        'xsrf' => $xsrfKey
    );

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

  
  private function isTnInAnmeldeKurs($anmeldeKurs, $tnr)
  {
    $dbwBelegung = \DBWorkBelegung::getDefaultInstance();
    $belegungen = $dbwBelegung->getBelegungenbyKursTeilnehmerNR($anmeldeKurs, $tnr);

    if (count($belegungen) == 0) {
      return false;
    }

    foreach ($belegungen as $belegung) {
      if (in_array($belegung->status, array('', ' ', 'A', 'T', 'P', 'U'))) {
        return true;
      }
    }

    return false;
  }

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

    return $this->response;
  }

  private function getKurs($knr)
  {
    $dbwKurse = new \DBWorkKurseWT(1, true);

    return $dbwKurse->getKurs($knr);
  }

  private function getKursDataByDMZ($kursNr)
  {
    $kurs = $this->getKurs($kursNr);
    if (isset($kurs->id) && \AnmeldevorgangAdapter::getUebermittlungsart() == ANMELDUNG_MATOOL_DMZ) {
      try {
        $kurs = \AnmeldeAPI::updateKursData($kurs);
      } catch (\Exception $e) {
      }
    }

    return $kurs;
  }
}

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

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