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


class NotenUebersicht
{
  protected $_cssPrefix = 'notenuebersicht_';

  
  public function render($data)
  {
    $buttons = $this->_renderButtonBlock($data->backLink);
    $belegungen = $this->_renderBelegungBlock($data->belegungInfo);

    return $buttons . $belegungen;
  }

  private function _renderButtonBlock($backLink)
  {
    $result = '<div class="' . $this->_cssPrefix . 'buttons">';

    $result .= $this->_getButtonZeigeBelegung();
    $result .= $this->_getButtonZeigeFaecher();
    $result .= $this->_getButtonAllesZuklappen();

    $result .= HTMLOperations::CreateBackButton($backLink, $this->_cssPrefix . 'button_zurueck');

    $result .= '</div>';

    return $result;
  }

  protected function _getButtonZeigeBelegung()
  {
    return HTMLOperations::createButtonSpan('Einzelnoten anzeigen', 'Einzelnoten und Fächer anzeigen', $this->_cssPrefix . 'button_alles_aufklappen');
  }

  protected function _getButtonZeigeFaecher()
  {
    return HTMLOperations::createButtonSpan('Fächer anzeigen', 'Fächer ohne Einzelnoten anzeigen', $this->_cssPrefix . 'button_fach_aufklappen');
  }

  protected function _getButtonAllesZuklappen()
  {
    return HTMLOperations::createButtonSpan('Teilnehmer anzeigen', 'Teilnehmer ohne Fächer und Einzelnoten anzeigen', $this->_cssPrefix . 'button_alles_zuklappen');
  }

  private function _renderBelegungBlock($belegungAry)
  {
    $result = '<ul class="' . $this->_cssPrefix . 'belegung_daten">';
    if (count($belegungAry) > 0) {
      foreach ($belegungAry as $belegungInfo) {
        $result .= '<li>';
        $result .= $this->_renderBelegung($belegungInfo);
        $result .= $this->_renderFachBlock($belegungInfo['faecher']);
        $result .= '</li>';
      }
    } else {
      $result .= '<li>';
      $result .= $this->_renderOhneBelegung();
      $result .= '</li>';
    }
    $result .= '</ul>';

    return $result;
  }

  protected function _renderBelegung($belegungInfo)
  {
    return '<div class="' . $this->_cssPrefix . 'belegung">'
           . '<span class="' . $this->_cssPrefix . 'belegung_aufklappen"></span>'
           . '<span class="' . $this->_cssPrefix . 'tn_name">' . CleanOperations::cleanStringForHtml($belegungInfo['belegung']->getVarValueEx('name_vorname_ohne_komma', 'Teilnehmer')) . '</span> '
           . '<span class="' . $this->_cssPrefix . 'tn_noten_anzahl">Notenanzahl: ' . CleanOperations::cleanStringForHtml($belegungInfo['notenAnzahl']) . '</span> '
           . '<span class="' . $this->_cssPrefix . 'tn_noten_durchschnitt">Notendurchschnitt: ' . CleanOperations::cleanStringForHtml($belegungInfo['notenDurchschnitt']) . '</span>'
           . '</div>';
  }

  protected function _renderOhneBelegung()
  {
    return '<div class="' . $this->_cssPrefix . 'belegung">'
           . '<span class="' . $this->_cssPrefix . 'tn_name">Keine Teilnehmer mit Noten gefunden</span> '
           . '</div>';
  }

  private function _renderFachBlock($fachAry)
  {
    $result = '<ul class="' . $this->_cssPrefix . 'tn_fach">';
    if (count($fachAry) > 0) {
      foreach ($fachAry as $fach) {
        $result .= '<li>';
        $result .= $this->_renderFach($fach);
        $result .= $this->_renderNotenBlock($fach['noten']);
        $result .= '</li>';
      }
    } else {
      $result .= '<li>';
      $result .= $this->_renderOhneFach();
      $result .= '</li>';
    }
    $result .= '</ul>';

    return $result;
  }

  protected function _renderFach($fach)
  {
    $nichtBeurteilt = ($fach['tnFach']->nichtbeurteilt) ? ' (nicht beurteilt)' : '';

    return '<div class="' . $this->_cssPrefix . 'fach">'
           . '<span class="' . $this->_cssPrefix . 'fach_aufklappen"></span>'
           . '<span class="' . $this->_cssPrefix . 'fach_name">' . CleanOperations::cleanStringForHtml($fach['name']) . $nichtBeurteilt . '</span> '
           . '<span class="' . $this->_cssPrefix . 'fach_noten_anzahl">Notenanzahl: ' . CleanOperations::cleanStringForHtml($fach['notenAnzahl']) . '</span> '
           . '<span class="' . $this->_cssPrefix . 'fach_noten_durchschnitt">Notendurchschnitt: ' . CleanOperations::cleanStringForHtml($fach['notenDurchschnitt']) . '</span> '
           . '<span class="' . $this->_cssPrefix . 'fach_ist_pflichtfach">' . ($fach['isPflichtfach'] ? 'Pflichtfach' : 'Wahlfach') . '</span>'
           . '</div>';
  }

  private function _renderOhneFach()
  {
    return '<div class="' . $this->_cssPrefix . 'fach">'
           . '<span class="' . $this->_cssPrefix . 'fach_name">ohne Fächer</span> '
           . '</div>';
  }

  protected function _renderNotenBlock($notenAry)
  {
    $result = '<ul class="' . $this->_cssPrefix . 'tn_noten">';
    if (count($notenAry) > 0) {
      foreach ($notenAry as $noten) {
        $result .= '<li>';
        $result .= $this->_renderNote($noten);
        $result .= '</li>';
      }
    } else {
      $result .= '<li>';
      $result .= $this->_renderOhneNoten();
      $result .= '</li>';
    }
    $result .= '</ul>';

    return $result;
  }

  private function _renderNote($noten)
  {
    $pruefung = (trim($noten['tnNote']->pruefung) != '') ? CleanOperations::cleanStringForHtml($noten['tnNote']->pruefung) : 'ohne Bezeichnung';

    return '<div class="' . $this->_cssPrefix . 'note">'
           . '<span class="' . $this->_cssPrefix . 'note_pruefung">Prüfung: ' . $pruefung . '</span> '
           . ($noten['tnNote']->datum != '' ? '<span class="' . $this->_cssPrefix . 'note_datum">Datum: ' . CleanOperations::cleanStringForHtml($noten['tnNote']->datum) . '</span> ' : '')
           . '<span class="' . $this->_cssPrefix . 'note_note">Note: ' . CleanOperations::cleanStringForHtml($noten['tnNote']->note) . '</span> '
           . '<span class="' . $this->_cssPrefix . 'note_gewichtung">Gewichtung: ' . CleanOperations::cleanStringForHtml($noten['tnNote']->gewichtung) . '</span>'
           . '</div>';
  }

  private function _renderOhneNoten()
  {
    return '<div class="' . $this->_cssPrefix . 'note">'
           . '<span class="' . $this->_cssPrefix . 'note_pruefung">ohne Noten</span>'
           . '</div>';
  }
}