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

class KursgebuehrBerechnungsKontextLaderNeueAnmeldung extends KursgebuehrBerechnungsKontextLader
{
  protected function getKontexte(): array
  {
    $data = array();
    $anminfo = SessionOperations::getVarValueAnmInfo();
    $ermgrundHauptTn = CleanOperations::cleanInt($anminfo->hauptTn->erm_grund, -1);
    $ermgrundWeitere = ConstantOperations::isGebuehrFuerWeitereTnErmaessigbar() ? $ermgrundHauptTn : -1;
    $isFirmenanmeldung = $anminfo->hauptTn->geschlecht == 'F';
    $pers_nr = $anminfo->hauptTn->pers_nr;
    $dbwWkKurs = new DBWorkWarenkorbKurse();
    foreach ($anminfo->kurse as $anmkurs) {
      $knr = isset($anmkurs->knr) ? $anmkurs->knr : $anmkurs->id;
      $index = $dbwWkKurs->getEntryIndex($knr);
      if ($index < 0) { 
        throw new LogicException("Kurs '$knr' liegt nicht im Warenkorb - aber in der anminfo: kann Gebühr nicht berechnen");
      }
      $kontext = $this->getKursgebuehrBerechnungsKontextFromAnmKurs(
        $anmkurs,
        true,
        $isFirmenanmeldung,
        $ermgrundHauptTn,
        $ermgrundWeitere,
        $pers_nr
      );

      if (BASysSettingsAPI::isSpendenFondAktiv() && $index == 0 && $anminfo->hauptTn->spendencheck == '1') {
        $spendenbetrag = MathOperations::stringToFloat($anminfo->hauptTn->spendenbetrag);
        $kontext->spendeninfos = SpendenFondInfos::create($spendenbetrag);
      }
      $data[] = $kontext;
    }

    return $data;
  }

  private function getKursgebuehrBerechnungsKontextFromAnmKurs(
    stdClass $anmkurs,
    bool $isRabattierbar,
    bool $isFirmenanmeldung,
    int $ermGrundHauptTn,
    int $ermGrundWeitere,
    string $persNr
  ): KursgebuehrBerechnungsKontext {
    $knr = isset($anmkurs->knr) ? $anmkurs->knr : $anmkurs->id;
    $tns = array();
    $zp = -1;
    if (isset($anmkurs->zahlplan) && $anmkurs->zahlplan > 0) {
      $zp = $anmkurs->zahlplan;
    }
    if ($anmkurs->hauptTnAuch) {
      $tns[] = KursgebuehrBerechnungsKontextTeilnehmer::fromErmGrund($ermGrundHauptTn, $zp);
    }
    $kinderanzahl = 0;
    if (isset($anmkurs->weitereTeilnehmer)) {
      foreach ($anmkurs->weitereTeilnehmer as $weiterer) {
        if (isset($weiterer->istkind) && $weiterer->istkind) {
          $kinderanzahl++;
        } else {
          $tns[] = KursgebuehrBerechnungsKontextTeilnehmer::fromErmGrund($ermGrundWeitere, $zp);
        }
      }
    }
    $rabattierbar = APIGebuehren::isKollegenrabattErlaubt($isRabattierbar, $isFirmenanmeldung, count($tns));

    return new KursgebuehrBerechnungsKontext(
      $knr,
      $kinderanzahl,
      $rabattierbar,
      $anmkurs->hauptTnAuch,
      true,
      $isFirmenanmeldung,
      $persNr,
      $tns
    );
  }
}