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

class EPaymentHinderungsgruende
{
  
  public const STATUS_OK = 0;
  public const STATUS_REIHENKURS = 100;
  public const STATUS_ABW_ZAHLER = 101;
  public const STATUS_KURS_LEER = 102;

  
  private $dbwKurse;

  public function __construct()
  {
    $this->dbwKurse = new DBWorkKurse();
  }

  
  public function getEPaymentAnmeldungenNotAllowed(): array
  {
    $dbwWkKurseWB = new DBWorkWarenkorbKurseWB();
    $kurse = $dbwWkKurseWB->getKurse();
    $notAllowed = array();

    foreach ($kurse as $kurs) {
      if (!$this->isEPaymentAllowedForKurs($kurs)) {
        $notAllowed[] = $kurs->id;
      }
    }

    return $notAllowed;
  }

  
  public function isEPaymentAllowedForKurs(\Kurs $kurs): bool
  {
    $result = $this->checkForKurs($kurs);

    return empty($result);
  }

  
  public function isEPaymentAllowedForKurse(array $kurse): bool
  {
    foreach ($kurse as $kurs) {
      if (!$this->isEPaymentAllowedForKurs($kurs)) {
        return false;
      }
    }

    return true;
  }

  
  public function checkForKurse(array $kurse): array
  {
    $result = array();

    foreach ($kurse as $kurs) {
      $statusArray = $this->checkForKurs($kurs);
      if (!empty($statusArray)) {
        $result[$kurs->id] = $statusArray;
      }
    }

    return $result;
  }

  
  public function checkForKurs(\Kurs $kurs): array
  {
    $status = array();

    
    if ($kurs->isEmpty()) {
      return array(self::STATUS_KURS_LEER => 'Es konnten keine Daten zu diesem Kurs gefunden werden');
    }

    
    
    
    if (\AnmeldungOperations::isAbweichenderZahlerInAnmeldung()) {
      $status[self::STATUS_ABW_ZAHLER] = 'Es ist ein abweichender Zahler in der Anmeldung eingetragen';
    }

    if ($this->dbwKurse->isHauptkurs($kurs->id)) {
      $status[self::STATUS_REIHENKURS] = 'E-Payment wird bei Anmeldungen zu Reihenkursen nicht unterstützt';
    }

    $anmStatus = $this->getAnmeldestatus($kurs->id);
    if ($anmStatus !== ANMELDUNGONLINE_OK && $anmStatus !== ANMELDUNGONLINE_OFFLINE) {
      $status[$anmStatus] = 'Anmeldestatus: ' . \ConstantOperations::getAnmeldestatusText($anmStatus);
    }

    return $status;
  }

  private function getAnmeldestatus(string $kursId): int
  {
    $anzahlKinder = 0;
    if (\SessionOperations::isNeuesAnmeldeverfahren() && \SessionOperations::getVarValueAnmInfo() != '') {
      $weitereTn = \SessionOperations::getVarValueAnmInfoKursValue($kursId, 'weitereTeilnehmer');
      $anzahlTeilnehmer = $weitereTn != '' ? count($weitereTn) : 0;
      if ($anzahlTeilnehmer > 0) {
        $weitereTeilnehmer = \SessionOperations::getVarValueAnmInfoKursValue($kursId, 'weitereTeilnehmer');
        if (isset($weitereTeilnehmer[0]->istkind) && $weitereTeilnehmer[0]->istkind) {
          $anzahlKinder = $anzahlTeilnehmer;
          $anzahlTeilnehmer = 0;
        }
      }
      if (\SessionOperations::getVarValueAnmInfoKursValue($kursId, 'hauptTnAuch')) {
        $anzahlTeilnehmer++; 
      }
    } else {
      $anzahlTeilnehmer = 1;
      if (\SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_ELTERNKIND) {
        $anzahlKinder = count(\SessionOperations::getKinderFromSession());
      } elseif (\SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_MEHRFACH) {
        $anzahlTeilnehmer += count(\SessionOperations::getMehrfachPersonFromSession());
      } elseif (\SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_PAAR) {
        $anzahlTeilnehmer = 2;
      } elseif (\SessionOperations::getVarValueAnm(ANMELDEART) == ANMELDEART_INTERN_FIRMA) {
        $anzahlTeilnehmer = count(\SessionOperations::getMitarbeiterFromSession());
      }
    }

    $config = \Kufer\Web\Classes\KursStatus\KursStatusCheckConfigFactory::createForAnmeldung();
    
    
    $config->checkKursVoll = true;

    return \Kufer\Web\Classes\Addfunctions\KursOperations::getAnmeldeStatusForKnr(
      $kursId,
      $anzahlTeilnehmer,
      $anzahlKinder,
      \AnmeldungOperations::isOnlineteilnahme($kursId),
      $config
    );
  }
}