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


class GebuehrenBerechnungsFassade
{
  public static function getGebuehrenSumme(KursgebuehrBerechnungsKontextLader $kgebBerLoader): float
  {
    $berechnung = self::setupGebuehrenBerechnungWithLoader($kgebBerLoader);

    return $berechnung->berechneGebuehrenSumme();
  }

  public static function getGebuehrenSummeNichtErmaessigt(KursgebuehrBerechnungsKontextLader $kgebBerLoader): float
  {
    $kontexte = $kgebBerLoader->load();
    $kontexte = KursgebuehrBerechnungsKontextUtils::setNichtErmaessigtForAll($kontexte);
    $berechnung = self::setupGebuehrenBerechnung($kontexte);

    return $berechnung->berechneGebuehrenSumme();
  }

  public static function getGebuehrenByKurs(KursgebuehrBerechnungsKontextLader $kgebBerLoader): array
  {
    $berechnung = self::setupGebuehrenBerechnungWithLoader($kgebBerLoader);

    return $berechnung->berechneGebuehrenByKurs();
  }

  public static function getGebuehrenForKurs(string $knr, KursgebuehrBerechnungsKontextLader $kgebBerLoader): float
  {
    $berechnung = self::setupGebuehrenBerechnungWithLoader($kgebBerLoader);

    return $berechnung->berechneGebuehrenForKurs($knr);
  }

  public static function getGebuehrenSaetzeForKurs(string $knr, KursgebuehrBerechnungsKontextLader $kgebBerLoader): array
  {
    $berechnung = self::setupGebuehrenBerechnungWithLoader($kgebBerLoader);

    return $berechnung->getGebuehrenSaetze($knr);
  }

  public static function setupGebuehrenBerechnungWithLoader(KursgebuehrBerechnungsKontextLader $kgebBerLoader): GebuehrenBerechnung
  {
    $kGebBerKontexte = $kgebBerLoader->load();

    return self::setupGebuehrenBerechnung($kGebBerKontexte);
  }

  
  public static function setupGebuehrenBerechnung(array $kgebBerKontexte): GebuehrenBerechnung
  {
    $berechnung = new GebuehrenBerechnung();
    $berechnung->setBerechnungsKontexte($kgebBerKontexte);
    $knrs = KursgebuehrBerechnungsKontextUtils::getKnrs($kgebBerKontexte);
    $berechnung->loadKursgebuehrenElemente(new KursgebuehrElementeLaderFromDb($knrs));

    return $berechnung;
  }
}