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

namespace Kufer\Web\KuferTools\Basis\Feedbackauswertung\FeedbackAuswertungenUebersicht;

use Kufer\Web\KuferTools\Basis\Feedbackauswertung\FeedbackAuswertungenFragen;

class FeedbackAuswertungenUebersichtPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  protected function getContent()
  {
    if ($this->useCaseResponse->noData) {
      $view = $this->getView();

      return $view->getNoData();
    }

    return $this->getAnderenContentAlsBody($this->useCaseResponse->bogenDetailsAry);
  }

  protected function getView()
  {
    return new FeedbackAuswertungenUebersichtView($this->getViewModel());
  }

  protected function getAnderenContent($datamodul, $key): string
  {
    $result = '';
    $countAntwortFragenAry = $this->useCaseResponse->countAntwortFragenAry;

    
    $bogenViewModel = new FeedbackAuswertungenFragen\FeedbackFeedbackAuswertungBogenViewModel();
    $bogenViewModel->bogenDataModul = $datamodul;
    $bogenViewModel->index = $key;
    $bogenView = $this->getBogenView4AnderenContent($bogenViewModel);
    $result .= $bogenView->getHeader();

    foreach ($datamodul->feedbackBogenFragen as $key => $fragenBogen) {
      
      $fragenUndAntwortViewModel = new FeedbackAuswertungenFragen\FeedbackFeedbackAuswertungFragenUndAntwortViewModel();
      $fragenUndAntwortViewModel->fragenUndAntwortenDataModul = $fragenBogen;
      $fragenUndAntwortViewModel->index = $key;
      $fragenUndAntwortViewModel->bezeichnung = $fragenBogen->feedbackfrage->bezeichnung;

      
      $antwortZuFragenViewModel = new FeedbackAuswertungenFragen\FeedbackFeedbackAuswertungAntwortZuFragenViewModel();
      $antwortZuFragenViewModel->frageAntwortZuFragenDatamodul = $fragenBogen;
      $antwortZuFragenViewModel->index = $key;

      $antwortMoeglichkeitenAry = array();
      $countAntwortMoeglichkeiten = $fragenBogen->feedbackfrage->anzeigeanzahl;

      $anzahl4keineAntwort = 0;
      $prozent4keineAntwort = 0;

      $keineAnwort = 'n/a';
      if (isset($countAntwortFragenAry[$fragenBogen->id . '_' . (-1)])) {
        $anzahl4keineAntwort = $countAntwortFragenAry[$fragenBogen->id . '_' . (-1)];
        $prozent4keineAntwort = \MathOperations::floatToStringTruncateNull($anzahl4keineAntwort * 100 / $countAntwortFragenAry[$fragenBogen->id]);
        $fragenUndAntwortViewModel->wieOftAnwortmoeglichkeitDurchschnitt = 0;
        $fragenUndAntwortViewModel->bemerkung = $countAntwortFragenAry[$fragenBogen->id . '_bemerkung'];
      }

      $antwortMoeglichkeitenAry[] = $this->getAntwortDatamodul($keineAnwort, $anzahl4keineAntwort, $prozent4keineAntwort);

      $summeAnzahlProFrage = 0;

      for ($i = 0; $i < $countAntwortMoeglichkeiten; $i++) {
        if (isset($countAntwortFragenAry[$fragenBogen->id . '_' . ($i + 1)])) {
          $anzahl = $countAntwortFragenAry[$fragenBogen->id . '_' . ($i + 1)];
          $summeAnzahlProFrage += $anzahl;
        }
      }

      $summeAnwortAuswahlMalAnzahl = 0;
      for ($i = 0; $i < $countAntwortMoeglichkeiten; $i++) {
        $anzahl = 0;
        $prozent = 0;
        $antwortAuswahl = $i + 1;

        if (isset($countAntwortFragenAry[$fragenBogen->id . '_' . ($i + 1)])) {
          $anzahl = $countAntwortFragenAry[$fragenBogen->id . '_' . ($i + 1)];
          $prozent = \MathOperations::floatToStringTruncateNull($anzahl * 100 / $countAntwortFragenAry[$fragenBogen->id]);
          $fragenUndAntwortViewModel->bemerkung = $countAntwortFragenAry[$fragenBogen->id . '_bemerkung'];

          $summeAnwortAuswahlMalAnzahl += ($anzahl * $antwortAuswahl);
        }
        if ($summeAnzahlProFrage > 0) {
          $fragenUndAntwortViewModel->wieOftAnwortmoeglichkeitDurchschnitt = \MathOperations::floatToStringTruncateNull($summeAnwortAuswahlMalAnzahl / $summeAnzahlProFrage);
        } else {
          $fragenUndAntwortViewModel->wieOftAnwortmoeglichkeitDurchschnitt = 0;
        }
        $antwortMoeglichkeitenAry[] = $this->getAntwortDatamodul($fragenBogen->feedbackfrage->anzeigetexte[$i] ?? '#FEHLER', $anzahl, $prozent);
      }

      
      $fragenUndAntwortView = $this->getFragenUndAntwortView4AnderenContent($fragenUndAntwortViewModel);
      $result .= $fragenUndAntwortView->getHeader();

      
      $antwortZuFragenViewModel->antwortTabelle = $antwortMoeglichkeitenAry;
      $antwortZuFragenViewModel->bogenFrageid = $fragenBogen->id;
      $antwortZuFragenView = $this->getAntwortZuFragenView4AnderenContent($antwortZuFragenViewModel);

      
      $result .= $antwortZuFragenView->show();
      $result .= $fragenUndAntwortView->getFooter();
    }

    $result .= $bogenView->getFooter();

    return $result;
  }

  protected function getBogenView4AnderenContent($viewModel)
  {
    return new
    FeedbackAuswertungenFragen\FeedbackAuswertungenBogenView($viewModel);
  }

  protected function getFragenUndAntwortView4AnderenContent($viewModel)
  {
    return new
    FeedbackAuswertungenFragen\FeedbackAuswertungenFragenUndAntwortView($viewModel);
  }

  protected function getAntwortZuFragenView4AnderenContent($viewModel)
  {
    return new
     FeedbackAuswertungenFragen\FeedbackAuswertungenAntwortZuFragenView($viewModel);
  }

  protected function getViewModel()
  {
    $viewModel = new FeedbackAuswertungenUebersichtModel();
    $viewModel->ueberschrift = $this->useCaseResponse->ueberschrift;
    $viewModel->buttons = $this->getButtonHtml();
    $viewModel->referrer = $this->useCaseResponse->referrer;
    $viewModel->referrerLabel = $this->useCaseResponse->referrerLabel;

    return $viewModel;
  }

  
  private function getAntwortDatamodul($pAntwortMoeglichkeit, $pAnzahl, $pProzent)
  {
    $datamodulAnzeigeText = new \Datamodul();
    
    $datamodulAnzeigeText->frageAntwortMoeglichkeiten = $pAntwortMoeglichkeit;
    
    $datamodulAnzeigeText->wieOftAnwortMoeglichkeitAnzahl = $pAnzahl;
    
    $datamodulAnzeigeText->wieOftAnwortMoeglichkeitProzent = $pProzent;

    return $datamodulAnzeigeText;
  }

  protected function getButtonHtml()
  {
    $buttonleiste = new \Kufer\Web\KuferTools\Basis\Button\Buttonleiste();

    return $buttonleiste->getHtmlButtonleiste($this->useCaseResponse->buttons);
  }

  protected function getJsFilesSrcAryWeitere(): array
  {
    $js = parent::getJsFilesSrcAryWeitere();
    $js[] = $this->getJsFileFromSys('kursuebersicht.js');
    $js[] = $this->getJsFileFromSys('filter.js');
    $js[] = $this->getJsFileFromJQuery('plugins/jquery.treeview.js', \CodingOperations::getEncoding4ExternalKuferToolsJsFiles());

    return $js;
  }

  protected function getCssFilesSrcAry(): array
  {
    $cssFileAry = parent::getCssFilesSrcAry();
    $cssFileAry[] = $this->getCssLinkFromJQuery('treeview/jquery.treeview.css');

    return $cssFileAry;
  }
}