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


class FeedBackBlaetternAPI
{
  
  public static function initSessionVars($pCode)
  {
    SessionOperations::setVarValueIntern('feedback_code_object', serialize($pCode));
    SessionOperations::setVarValueIntern('feedback_bogen_id', $pCode->bogenid);
    SessionOperations::setVarValueIntern('kw_session_put_feedback_bogen_id', $pCode->bogenid);
    SessionOperations::setVarValueIntern('feedback_knr', $pCode->knr);
    SessionOperations::setVarValueIntern('kw_session_put_feedback_knr', $pCode->knr);
    SessionOperations::setVarValueIntern('feedback_fuer_dozent', $pCode->fuer_dozent);
    SessionOperations::setVarValueIntern('kw_session_put_feedback_fuer_dozent', $pCode->fuer_dozent);
    SessionOperations::setVarValueIntern('feedback_dnr', $pCode->dnr);
    SessionOperations::setVarValueIntern('kw_session_put_feedback_dnr', $pCode->dnr);
    SessionOperations::setVarValueIntern('feedback_tnr', $pCode->tnr);
    SessionOperations::setVarValueIntern('kw_session_put_feedback_tnr', $pCode->tnr);

    $dbwFeedBackBogen = new DBWorkFeedBackBogen(1, true);
    $dbwFeedBackBogenFragen = new DBWorkFeedBackBogenFragen(1, true);

    $feedBackBogen = $dbwFeedBackBogen->getFeedBackBogenByID($pCode->bogenid);

    $anzahlFragen = 0;
    if ($feedBackBogen->fragen_online_gruppiert) {
      $feedBackBogenFragen = $dbwFeedBackBogenFragen->getFeedBackBogenFragenByBogenID($pCode->bogenid);
      $fragenGruppiertAry = array();

      foreach ($feedBackBogenFragen as $bogenFrage) {
        if ($bogenFrage->frageid <= 0 && substr_count($bogenFrage->bereich, '.') === 1) {
          $anzahlFragen++;
          $fragenGruppiertAry[$anzahlFragen] = array();
          SessionOperations::setVarValueIntern('feedback_frage_' . $anzahlFragen, serialize($bogenFrage));
        } else {
          $fragenGruppiertAry[$anzahlFragen][] = $bogenFrage;
        }
      }

      foreach ($fragenGruppiertAry as $nr => $fragenGruppiert) {
        SessionOperations::setVarValueIntern('feedback_frage_' . $nr . '_fragen_gruppiert', serialize($fragenGruppiert));
      }
    } else {
      $feedBackBogenFragen = $dbwFeedBackBogenFragen->getFeedBackFragenByBogenID($pCode->bogenid);

      foreach ($feedBackBogenFragen as $bogenFrage) {
        $anzahlFragen++;
        SessionOperations::setVarValueIntern('feedback_frage_' . $anzahlFragen, serialize($bogenFrage));
      }
    }

    SessionOperations::setVarValueIntern('feedback_anzahl_fragen', $anzahlFragen);
    SessionOperations::setVarValueIntern('feedback_bogen_bezeichnung', $feedBackBogen->bezeichnung);
    SessionOperations::setVarValueIntern('feedback_bogen', serialize($feedBackBogen));
    SessionOperations::setVarValueIntern('feedback_antworten', array());
  }

  
  public static function resetSessionVars()
  {
    SessionOperations::setVarValueIntern('feedback_code_object', '');

    SessionOperations::setVarValueIntern('feedback_antworten', array());
    for ($i = 1; $i <= SessionOperations::getVarValueIntern('feedback_anzahl_fragen'); $i++) {
      SessionOperations::setVarValueIntern('feedback_frage_' . $i, '');
      SessionOperations::setVarValueIntern('feedback_frage_' . $i . '_fragen_gruppiert', '');
    }
    SessionOperations::setVarValueIntern('feedback_anzahl_fragen', '');
    SessionOperations::setVarValueIntern('feedback_bogen', '');
    SessionOperations::setVarValueIntern('feedback_seiten_ueberspringen', array());

    
    
    
  }

  
  public static function getFrageNrFromRequest(): int
  {
    $urlParamterFeedback = new \URLParameterFeedBack();

    $korrektur = 0;
    if (self::isOldBrowserWithoutJS()) {
      if (\PostOperations::isDefined('button_zurueck') || \PostOperations::isDefined('button_zurueck_x')) {
        $korrektur = -2;
      }
    }

    return $urlParamterFeedback->frageNr + $korrektur;
  }

  
  public static function getFrageNrForNextPage(): int
  {
    $frageNr = self::getFrageNrFromRequest();
    
    
    if ($frageNr === 0) {
      return $frageNr;
    }

    static $cache = null;
    if (is_null($cache)) {
      self::setzeZuUeberspringendeSeitenInSession();

      $seitenUeberspringenAry = \SessionOperations::getVarValueIntern('feedback_seiten_ueberspringen', array());

      if (isset($seitenUeberspringenAry[$frageNr])) {
        if (\PostOperations::isDefined('button_zurueck') || \PostOperations::isDefined('button_zurueck_x')
          || \PostOperations::isDefined('nachspann_button_zurueck') || \PostOperations::isDefined('nachspann_button_zurueck_x')) {
          $frageNr += $seitenUeberspringenAry[$frageNr]['zurueck'];
        } else {
          $frageNr += $seitenUeberspringenAry[$frageNr]['vor'];
        }
      }
      $cache = $frageNr;
    }

    return $cache;
  }

  
  private static function setzeZuUeberspringendeSeitenInSession(): void
  {
    if (\GetOperations::isDefined('skip')) {
      $seitenUeberspringenAry = \SessionOperations::getVarValueIntern('feedback_seiten_ueberspringen', array());
      $anzahlSeitenUeberspringen = (int)\GetOperations::getVarValue('skip', 0);
      $frageNrFromRequest = \FeedBackBlaetternAPI::getFrageNrFromRequest();

      
      if ($anzahlSeitenUeberspringen === 0 && isset($seitenUeberspringenAry[$frageNrFromRequest])) {
        for ($i = $seitenUeberspringenAry[$frageNrFromRequest]['vor'] - 1; $i >= 0; $i--) {
          unset($seitenUeberspringenAry[$frageNrFromRequest + $i]);
        }
      } else { 
        for ($i = 0; $i < $anzahlSeitenUeberspringen; $i++) {
          $seitenUeberspringenAry[$frageNrFromRequest + $i] = array('vor' => $anzahlSeitenUeberspringen - $i, 'zurueck' => -1 * $i - 1);
        }
      }

      \SessionOperations::setVarValueIntern('feedback_seiten_ueberspringen', $seitenUeberspringenAry);
    }
  }

  
  public static function isOldBrowserWithoutJS()
  {
    return GetOperations::isDefined('formaction');
  }
}