<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */

namespace Kufer\Web\KuferTools\Firma\KursUebersicht\Detailsreiter\Anmeldung;

class AnmeldungPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\Presenter
{
  protected function getView()
  {
    return new AnmeldungView($this->getViewModel());
  }

  protected function getViewModel()
  {
    $viewModel = new AnmeldungViewModel();
    $viewModel->belegungFirma = $this->useCaseResponse->belegungFirma;

    $viewModel->belegungenMitarbeiterAngemeldet = $this->useCaseResponse->belegungenMitarbeiterAngemeldet;
    $viewModel->belegungenMitarbeiterReserviert = $this->useCaseResponse->belegungenMitarbeiterReserviert;
    $viewModel->belegungenMitarbeiterWarteliste = $this->useCaseResponse->belegungenMitarbeiterWarteliste;

    $viewModel->dienststellen = $this->useCaseResponse->dienststellen;

    return $viewModel;
  }

  public function present()
  {
    $content = parent::present();
    $content .= '<script>' . $this->getJSDeclarations() . '</script>';

    return $content;
  }

  protected function getJSDeclarations(): string
  {
    $result = 'registerNamespace("KuferTools.Anmeldung");' . "\n";
    $result .= \JsOperations::getDeclarationJson('KuferTools.Anmeldung.Dienststellen', $this->useCaseResponse->dienststellen);
    $result .= \JsOperations::getDeclarationJson('KuferTools.Anmeldung.Berufe', $this->useCaseResponse->hlBerufe);

    $kurs = $this->useCaseResponse->belegungFirma->kurs;
    $result .= 'registerNamespace("KuferTools.KursDetails.Kurs");' . "\n";
    $result .= \JsOperations::getDeclarationString('KuferTools.KursDetails.Kurs.Beginn', \StringOperations::htmlentities($kurs->beginn_dat, ENT_QUOTES));
    $result .= \JsOperations::getDeclarationString('KuferTools.KursDetails.Kurs.Ende', \StringOperations::htmlentities($kurs->ende_dat, ENT_QUOTES));
    $result .= \JsOperations::getDeclarationString('KuferTools.KursDetails.Kurs.Anm_Ende', \StringOperations::htmlentities($kurs->anm_ende, ENT_QUOTES));
    $result .= \JsOperations::getDeclarationString('KuferTools.KursDetails.Kurs.VortagBeginn', \StringOperations::htmlentities(\DateTimeOperations::computeDate($kurs->beginn_dat, '- 1 day'), ENT_QUOTES));

    $result .= $this->getJsDataForButtons($this->useCaseResponse->belegungenMitarbeiterAngemeldet);
    $result .= $this->getJsDataForButtons($this->useCaseResponse->belegungenMitarbeiterReserviert);
    $result .= $this->getJsDataForButtons($this->useCaseResponse->belegungenMitarbeiterWarteliste);

    $result .= '$("#submitListe").data("anzAng", ' . \JsonOperations::encode(count($this->useCaseResponse->belegungenMitarbeiterAngemeldet)) . ').data("anzRes", ' . \JsonOperations::encode(count($this->useCaseResponse->belegungenMitarbeiterReserviert)) . ');';
    $result .= '$("#submitListe").data("firmaBelid", ' . \JsonOperations::encode($this->useCaseResponse->belegungFirma->id) . ');';
    $result .= '$("#submitListe").data("firmaTnr", ' . \JsonOperations::encode($this->useCaseResponse->belegungFirma->tnr) . ');';
    $result .= '$("#submitListe").data("knr", ' . \JsonOperations::encode($kurs->id) . ');';

    $tnListAry4Select = $this->getTnListAry4Select($this->useCaseResponse->tnListeAry);
    $result .= !empty($tnListAry4Select) ? '$("#tnListe4Select").data("tnListe", ' . \JsonOperations::encode($tnListAry4Select) . ');' : '';
    $result .= !empty($this->useCaseResponse->tnListeAry) ? '$("#tnListe").data("tnListe", ' . \JsonOperations::encode($this->useCaseResponse->tnListeAry) . ');' : '';
    $result .= !empty($this->useCaseResponse->adrPersAry) ? '$("#tnListe").data("adrPersListe", ' . \JsonOperations::encode($this->useCaseResponse->adrPersAry) . ');' : '';

    return $result;
  }

  private function getTnListAry4Select($tnListeAry)
  {
    $tnListAry4Select = array();
    foreach ($tnListeAry as $tnListObj) {
      $teiln4Select = new \Teilnehmer4Select();
      $teiln4Select->id = $tnListObj->id;
      $teiln4Select->name = $tnListObj->name;
      $teiln4Select->vorname = $tnListObj->vorname;
      $tnListAry4Select[] = $teiln4Select;
    }

    return $tnListAry4Select;
  }

  private function getJsDataForButtons($belegungen)
  {
    $result = '';
    $dbwAdrPers = new \DBWorkAdrPers();

    foreach ($belegungen as $bel) {
      
      $aryAdrPers = $dbwAdrPers->getAdrPersByTnNr($bel->teilnehmer->id);

      $result .= '$("#ma_anmeld_id_' . \CleanOperations::cleanInt($bel->id) . '").data("teilnehmer", ' . json_encode(\StringOperations::objectToUtf8($bel->teilnehmer)) . ');';
      if (isset($aryAdrPers[0])) {
        $result .= '$("#ma_anmeld_id_' . \CleanOperations::cleanInt($bel->id) . '").data("adrPers", ' . json_encode(\StringOperations::objectToUtf8($aryAdrPers[0])) . ');';
      }
      $result .= '$("#ma_anmeld_id_' . \CleanOperations::cleanInt($bel->id) . '").data("belegung", ' . json_encode(\StringOperations::objectToUtf8($bel)) . ');';
    }

    return $result;
  }
}