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

namespace Kufer\KuferTools\Basis\KursUebersicht\ShowFilterKursUebersicht;

use Kufer\KuferTools\Utils\KursFilter\HandleShowKursFilter;

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

  protected function getViewModel()
  {
    $viewModel = new ShowFilterKursUebersichtViewModel();
    $filterVon = $this->useCaseResponse->kursFilterVon;
    $filterBis = $this->useCaseResponse->kursFilterBis;

    $viewModel->stichworte = $filterVon->stichworte;
    $viewModel->kurstitel = $filterVon->kurzbez;
    if (isset($filterVon->kategorie)) {
      $viewModel->kategorie = $filterVon->kategorie[0];
    }
    if (isset($filterVon->sonderkategorie)) {
      $viewModel->sonderKategorie = $filterVon->sonderkategorie[0];
    }
    $viewModel->toolId = $this->useCaseResponse->toolId;
    $viewModel->knrVon = $filterVon->id;
    $viewModel->knrBis = $filterBis->id;
    $viewModel->kursbeginnVon = $filterVon->beginn_dat;
    $viewModel->kursbeginnBis = $filterBis->beginn_dat;
    $viewModel->aussenstelle = $filterVon->aussenstelle;
    $viewModel->kursort = $filterVon->kursort;
    $viewModel->fachbereich = $filterVon->fachbereich;
    $viewModel->semester = $filterVon->semester;
    $viewModel->wochentageNichtAngehakt = explode(',', $filterVon->wochentage_suche);
    $viewModel->dozent = $filterVon->hauptdozent->namevorname;
    $viewModel->teilnehmername = isset($filterVon->teilnehmername) ? $filterVon->teilnehmername : '';
    $viewModel->ma_planend = isset($filterVon->ma_planend_name) ? $filterVon->ma_planend_name : '';
    $viewModel->kurstage_gestern_und_heute = $filterVon->kurstage_gestern_und_heute ?? '';
    $viewModel->kurstage_gestern_und_heute_dozent = $filterVon->kurstage_gestern_und_heute_dozent ?? '';
    $viewModel->kurstage_aktiv_lehrend_dozent = $filterVon->kurstage_aktiv_lehrend_dozent ?? '';
    $viewModel->teilnehmerSuche = $this->useCaseResponse->teilnehmerSuche;
    $viewModel->kursausfall = $filterVon->kursausfall;
    $viewModel->keineAusgefallenenKurse = $this->useCaseResponse->keineAusgefallenenKurse;
    $viewModel->zielgruppe = $filterVon->kurs_zielg;
    $viewModel->kursort_bezirk = $filterVon->kursort_bezirk;
    $viewModel->kursort_gemeinde = $filterVon->kursort_gemeinde;
    $viewModel->veranstalter_bezirk = $filterVon->veranstalter_bezirk;
    $viewModel->veranstalter_gemeinde = $filterVon->veranstalter_gemeinde;

    
    
    $viewModel->kursabschluss = $filterVon->kursabschluss;
    $viewModel->kursStatus = $filterVon->kursstatus;
    
    
    $viewModel->keineAbgeschlossenenKurse = $this->useCaseResponse->keineAbgeschlossenenKurse;

    $isUnterkategorie = function($kategorie) {return $kategorie->owner > 0;};
    $isUnterFachbereich = function($fachbereich) {return \StringOperations::strlen($fachbereich->kennz) > 1;};

    $viewModel->kategorieOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->kategorien, 'id', 'text', $viewModel->kategorie, $isUnterkategorie);
    $viewModel->sonderKategorieOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->sonderKategorien, 'id', 'text', $viewModel->sonderKategorie, $isUnterkategorie);
    $viewModel->aussenstellenOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->aussenstellen, 'id', 'bezeichner', $viewModel->aussenstelle);
    $viewModel->kursOrteOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->kursOrte, 'id', 'mktext', $viewModel->kursort);
    $viewModel->fachbereicheOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->fachBereiche, 'kennz', 'text', $viewModel->fachbereich, $isUnterFachbereich);
    $viewModel->semesterOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->semester, 'sem', 'sem', $viewModel->semester);
    $viewModel->zielgruppenOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->zielgruppen, 'text', 'text', $viewModel->zielgruppe);
    $viewModel->bezirkOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->bezirke, 'bezirk', 'bezirk', $viewModel->kursort_bezirk);
    $viewModel->gemeindeOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->gemeinden, 'gemeinde', 'gemeinde', $viewModel->kursort_gemeinde);
    $viewModel->veranstalterBezirkOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->bezirke, 'bezirk', 'bezirk', $viewModel->veranstalter_bezirk);
    $viewModel->veranstalterGemeindeOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->gemeinden, 'gemeinde', 'gemeinde', $viewModel->veranstalter_gemeinde);
    $viewModel->mitarbeiterKennungOptionen = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->benutzer, 'kennung', 'kennung', $viewModel->ma_planend);

    $viewModel = $this->setFreiWaehlbareEingabefelder($filterVon, $viewModel);

    
    $viewModel->isBLAK = $this->useCaseResponse->isBLAK;
    
    
    $viewModel->onlyElearningKurse = $filterVon->elearningKursID;

    
    

    $otherKriterienNameValues = array(
      'Keine Einschränkung' => '',
      'Zukünftige Kurse' => 'infuture',
      'Beendete Kurse' => 'inpast'
    );

    $otherKriterienChecked = array_values(array_map(\FunctionOperations::returns(''), $otherKriterienNameValues));
    switch ($filterVon->other_kriterien) {
      case 'infuture':
        $otherKriterienChecked[1] = 'checked="checked"';
        break;
      case 'inpast':
        $otherKriterienChecked[2] = 'checked="checked"';
        break;
      case '':
      default:
        $otherKriterienChecked[0] = 'checked="checked"';
    }
    $otherKriterienAry = array();

    
    $i = 0;
    foreach ($otherKriterienNameValues as $name => $val) {
      $otherKritObj = new \stdClass();
      $otherKritObj->kritName = $name;
      $otherKritObj->kritVal = $val;
      $otherKritObj->kritChecked = $otherKriterienChecked[$i];
      $otherKriterienAry[$i] = $otherKritObj;
      $i++;
    }
    $viewModel->otherKriterienAry = $otherKriterienAry;

    
    $blakKriterienNameValues = array(
      'Keine Einschränkung' => '',
      'nur Web-Learning Kurse' => 'elearning_kurse',
      'Lernzielkontrollen' => 'lernzielkontrollen',
      'Web-Seminare' => 'webinare',
      'Präsenzkurse' => 'praesenz',
    );
    
    $blakKriterienChecked = array_values(array_map(\FunctionOperations::returns(''), $blakKriterienNameValues));
    switch ($filterVon->blak_kriterien) {
      case 'elearning_kurse':
        $blakKriterienChecked[1] = 'checked="checked"';
        break;
      case 'lernzielkontrollen':
        $blakKriterienChecked[2] = 'checked="checked"';
        break;
      case 'webinare':
        $blakKriterienChecked[3] = 'checked="checked"';
        break;
      case 'praesenz':
        $blakKriterienChecked[4] = 'checked="checked"';
        break;
      case '':
      default:
        $blakKriterienChecked[0] = 'checked="checked"';
    }
    $blakKriterienAry = array();

    
    $i = 0;
    foreach ($blakKriterienNameValues as $name => $val) {
      $blakKritObj = new \stdClass();
      $blakKritObj->kritName = $name;
      $blakKritObj->kritVal = $val;
      $blakKritObj->kritChecked = $blakKriterienChecked[$i];
      $blakKriterienAry[$i] = $blakKritObj;
      $i++;
    }
    $viewModel->blakKriterienAry = $blakKriterienAry;

    return $viewModel;
  }

  private function setFreiWaehlbareEingabefelder($filterVon, $viewModel)
  {
    for ($i = 1; $i <= 16; $i++) {
      $feldname = 'kursauswahl' . $i;
      $optionenName = $feldname . 'Optionen';
      $hinterlegungName = $feldname . 'hinterlegung';

      $viewModel->{$feldname} = $filterVon->{$feldname};
      $viewModel->{$optionenName} = HandleShowKursFilter::getSelectOptions($this->useCaseResponse->{$hinterlegungName}, 'text', 'text', $viewModel->{$feldname});
    }

    return $viewModel;
  }

  protected function getJsFilesSrcAryWeitere()
  {
    return array(
      $this->getJsFileFromSys('kursuebersicht.js')
    );
  }
}