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

class ErmaessigungsValidatorErsterTn
{
  public function validate(KursgebuehrBerechnungsKontext $kgebBerKontext): bool {
    if ($kgebBerKontext->hauptTnAuch) {
      if (SessionOperations::isSofortEinbuchen()) {
        
        if (SessionOperations::isStammhoererLoggedIn()) {
          $tnr = SessionOperations::getCurrentStammhoererTnr();
          $ermInfos = $this->getTnErmaessigungsInfos($tnr);
          $erm = DBWorkHLErmaessigungen::getDefaultInstance()->getOneByNr($ermInfos['erm_grund']);
          if($erm->isEmpty()) {
            return false;
          }
          $dbwErm = new DBWorkErmaessigung();
          return $erm->prozente == $kgebBerKontext->tns[0]->ermProzent
            && $erm->isKursbezogen() == $kgebBerKontext->tns[0]->kursbezogeneErmaessigung
            && $dbwErm->isErmaessigungStillValid($kgebBerKontext->knr, $ermInfos['erm_ende']);
        } else {
          return false;
        }
      }
    } else {
      if(SessionOperations::isSofortEinbuchen()) {
        
        return false;
      }
    }
    $settings = ToolSettingsAPI::getToolSettings(4);
    return $settings->ermaessigungberuecksichtigen === '1';
  }

  
  
  private function getTnErmaessigungsInfos($tnr): array {
    $sessionTnr = SessionOperations::getVarValueIntern('erminfo_tn_nr');
    if((empty($sessionTnr) || $sessionTnr != $tnr) || SessionOperations::haveSecondsPassed('erminfo', 300)) {
      $tn = TeilnehmerAPI::getTeilnehmerInfosPerDMZ($tnr);
      SessionOperations::setVarValueIntern('erminfo_tn_nr', $tnr);
      SessionOperations::setVarValueIntern('erminfo_tn_erm_grund', $tn->erm_grund);
      SessionOperations::setVarValueIntern('erminfo_tn_erm_ende', $tn->erm_ende);
    }
    return array(
      'erm_grund' => SessionOperations::getVarValueIntern('erminfo_tn_erm_grund'),
      'erm_ende'=>  SessionOperations::getVarValueIntern('erminfo_tn_erm_ende')
    );
  }
}