<?php

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

abstract class TeilnehmerZahlenProvider implements Teilnehmerzahlen
{
  
  protected $kurs;

  public function __construct(\Kurs $kurs)
  {
    
    
    
    $this->kurs = clone($kurs);
  }

  abstract public function getAnzahlTeilnehmerAngemeldet(): int;

  abstract public function getAnzahlKinderAngemeldet(): int;

  public function getAnzahlTeilnehmerUndKinderAngemeldet(): int
  {
    return $this->getAnzahlTeilnehmerAngemeldet() + $this->getAnzahlKinderAngemeldet();
  }

  abstract public function getAnzahlTeilnehmerWarteliste(): int;

  abstract public function getAnzahlKinderWarteliste(): int;

  public function getAnzahlTeilnehmerUndKinderWarteliste(): int
  {
    return $this->getAnzahlTeilnehmerWarteliste() + $this->getAnzahlKinderWarteliste();
  }

  public function getAnzahlTeilnehmerplaetzeFrei(): int
  {
    return $this->getAnzahlTeilnehmerMaximal() - $this->getAnzahlTeilnehmerAngemeldet();
  }

  public function getAnzahlKinderplaetzeFrei(): int
  {
    return $this->getAnzahlKinderMaximal() - $this->getAnzahlKinderAngemeldet();
  }

  public function getAnzahlTeilnehmerUndKinderPlaetzeFrei(): int
  {
    return $this->getAnzahlTeilnehmerUndKinderMaximal() - $this->getAnzahlTeilnehmerUndKinderAngemeldet();
  }

  public function getAnzahlTeilnehmerMaximal(): int
  {
    return $this->kurs->teil_max;
  }

  public function getAnzahlKinderMaximal(): int
  {
    return $this->kurs->kinder_max;
  }

  public function getAnzahlTeilnehmerUndKinderMaximal(): int
  {
    return $this->kurs->kurse2->tnki_max;
  }

  public function getAnzahlTeilnehmerMinimal(): int
  {
    return $this->kurs->teil_min;
  }

  public function getAnzahlKinderMinimal(): int
  {
    return $this->kurs->kinder_min;
  }

  public function getAnzahlTeilnehmerUndKinderMinimal(): int
  {
    return $this->kurs->kurse2->tnki_min;
  }

  

  abstract public function getAnzahlTeilnehmerAngemeldetOnline(): int;

  abstract public function getAnzahlKinderAngemeldetOnline(): int;

  public function getAnzahlTeilnehmerUndKinderAngemeldetOnline(): int
  {
    return $this->getAnzahlTeilnehmerAngemeldetOnline() + $this->getAnzahlKinderAngemeldetOnline();
  }

  abstract public function getAnzahlTeilnehmerWartelisteOnline(): int;

  abstract public function getAnzahlKinderWartelisteOnline(): int;

  public function getAnzahlTeilnehmerUndKinderWartelisteOnline(): int
  {
    return $this->getAnzahlTeilnehmerWartelisteOnline() + $this->getAnzahlKinderWartelisteOnline();
  }

  public function getAnzahlTeilnehmerplaetzeFreiOnline(): int
  {
    return $this->getAnzahlTeilnehmerMaximalOnline() - $this->getAnzahlTeilnehmerAngemeldetOnline();
  }

  public function getAnzahlKinderplaetzeFreiOnline(): int
  {
    return $this->getAnzahlKinderMaximalOnline() - $this->getAnzahlKinderAngemeldetOnline();
  }

  public function getAnzahlTeilnehmerUndKinderPlaetzeFreiOnline(): int
  {
    return $this->getAnzahlTeilnehmerUndKinderMaximalOnline() - $this->getAnzahlTeilnehmerUndKinderAngemeldetOnline();
  }

  public function getAnzahlTeilnehmerMaximalOnline(): int
  {
    return $this->kurs->kurse2->tnonline_max;
  }

  public function getAnzahlKinderMaximalOnline(): int
  {
    return $this->kurs->kurse2->kionline_max;
  }

  public function getAnzahlTeilnehmerUndKinderMaximalOnline(): int
  {
    return $this->kurs->kurse2->tnkionline_max;
  }
}