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

namespace Kufer\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Teilnehmer\AnmeldeBestaetigungPdf;

use Kufer\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Teilnehmer\AnmeldeBestaetigungPdf\HammelburgVhs\AnmeldeBestaetigung;

class AnmeldeBestaetigungDruckenUseCase extends \Kufer\KuferTools\Mitarbeiter\KursUebersicht\EinzelKursUseCase
{
  public function __construct($request)
  {
    parent::__construct($request, new AnmeldeBestaetigungDruckenResponse());
  }

  public static function getToolSectionId()
  {
    return 242;
  }

  public function hasAccess($pToolSectionId = null)
  {
    
    
    
    if (!parent::hasAccess()) {
      return false;
    }
    
    if (!$this->isRechtAllowed('242.0.14')) {
      return false;
    }

    return true;
  }

  public function action()
  {
    $kurs = $this->getKurs($this->request->knr);
    $kursort = $this->getKursort($kurs->ort);
    $belegungen = $this->getBelegungen($kurs);
    $benutzer = $this->getBenutzer();
    $aussenstelle = $this->getAussenstelle($benutzer->aussenstelle);


    $anmeldeBestaetigungPdf = new AnmeldeBestaetigung($this->request, $kurs, $belegungen, $kursort, $benutzer, $aussenstelle);

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

  
  private function getBelegungen($kurs)
  {
    $dbwBelegungen = \DBWorkBelegung::getDefaultInstance(1, true);
    $dbwBelegungen->newSearch();
    $dbwBelegungen->fromobject->status = $this->toolSettings->tnstatus;
    
    
    $nurAngemeldete = false;
    if ($dbwBelegungen->fromobject->status === '') {
      $nurAngemeldete = true;
    }
    
    $belegungen = $dbwBelegungen->getBelegungenbyKursNR($kurs->id, $nurAngemeldete, true);


    $firmenTnrs = \ArrayOperations::mapAttribut($belegungen, 'firma');
    $dbwTeilnehmer = new \DBWorkTeilnehmer(1, true);
    $firmenTeilnehmer = $dbwTeilnehmer->getTeilnehmByIdArray($firmenTnrs);
    
    
    $firmenTeilnehmerById = \ArrayOperations::setAttributAsKey($firmenTeilnehmer, 'id');


    
    foreach ($belegungen as $belegung) {
      if ($belegung->firma == 0) {
        $belegung->firmenObj = null;
      } else {
        if (isset($firmenTeilnehmerById[$belegung->firma])) {
          $firmenTeiln = $firmenTeilnehmerById[$belegung->firma];
          $belegung->firmenObj = new \stdClass();
          $belegung->firmenObj->vorname = $firmenTeiln->vorname;
          $belegung->firmenObj->name = $firmenTeiln->name;
          $belegung->firmenObj->tnr = $firmenTeiln->id;
          
          $belegung->firmenObj->kontoinhaber = $firmenTeiln->kontoinhaber;
          
          $belegung->firmenObj->status = $this->getStatusOfHauptBelegung($belegung->firma, $belegungen);
          
        }
      }
    }
    $result = array();
    
    if (count($this->request->belegungNummern) > 0) {
      foreach ($belegungen as $belegung) {
        if (in_array($belegung->id, $this->request->belegungNummern)) {
          $result[] = $belegung;
        }
      }
    } else {
      $result = $belegungen;
    }

    return $result;
  }

  
  private function getStatusOfHauptBelegung($pHauptTnr, $pBelegungen)
  {
    
    $status = 'A';
    $index = \SearchOperations::getArrayIndexbyfieldname($pBelegungen, 'tnr', $pHauptTnr);
    if ($index > -1) {
      $status = $pBelegungen[$index]->status;
    }

    return $status;
  }

  private function getKursort($pOrt)
  {
    $dbwKursort = \DBWorkKursorte::getDefaultInstance();

    return $dbwKursort->getKursortbymktext($pOrt);
  }

  private function getBenutzer()
  {
    $user = $this->getUser();
    $dbwBenutzer = \DBWorkBASysUser::getDefaultInstance();

    return $dbwBenutzer->getBasysUser($user->ben);
  }

  private function getAussenstelle($pAussenstBez)
  {
    $dbwAussenst = \DBWorkHLAussenstellen::getDefaultInstance();
    $aussenstelle = $dbwAussenst->getAussenstelleByBezeichner($pAussenstBez);

    return $aussenstelle ?? new \Aussenstelle();
  }

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

    return $this->response;
  }
}

class AnmeldeBestaetigungDruckenRequest
{
  public $knr;
  public $belegungNummern = array();
}

class AnmeldeBestaetigungDruckenResponse extends \Kufer\KuferTools\Basis\UseCase\ToolResponse
{
  public $anmeldeBestaetigungPdf;
}