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

namespace Kufer\Web\KuferTools\Basis\Anmeldung\AnmeldeartDialog;

class AllowedAnmeldearten
{
  
  private $kurs;

  
  private $isKinderKurs50;

  
  private $isKindAnmAllowedForUebermittlungsart;

  
  private $isRechtAllowedElternKindOderKindKurs;

  
  private $isMehrfachButtonAllowed;

  
  private $isFirmenButtonAllowed;

  
  private $filterAnmeldeartenByWeb;

  public function __construct(
    \Kurs $kurs,
    bool $isKinderKurs50,
    bool $isKindAnmAllowedForUebermittlungsart,
    bool $isRechtAllowedElternKindOderKindKurs,
    bool $isMehrfachButtonAllowed,
    bool $isFirmenButtonAllowed,
    bool $filterAnmeldeartenByWeb
  ) {
    $this->kurs = $kurs;
    $this->isKinderKurs50 = $isKinderKurs50;
    $this->isKindAnmAllowedForUebermittlungsart = $isKindAnmAllowedForUebermittlungsart;
    $this->isRechtAllowedElternKindOderKindKurs = $isRechtAllowedElternKindOderKindKurs;
    $this->isMehrfachButtonAllowed = $isMehrfachButtonAllowed;
    $this->isFirmenButtonAllowed = $isFirmenButtonAllowed;
    $this->filterAnmeldeartenByWeb = $filterAnmeldeartenByWeb;
  }

  public function determineAllowAnmeldung(): bool
  {
    if ($this->filterAnmeldeartenByWeb) {
      return ($this->kurs->webflags & \Kurs::WEBFLAG_KEINE) === 0;
    }

    return true;
  }

  public function determineAllowNormal(): bool
  {
    if (!$this->determineAllowAnmeldung()) {
      return false;
    }

    if ($this->filterAnmeldeartenByWeb && (($this->kurs->webflags & \Kurs::WEBFLAG_NORMAL) === 0 && !empty($this->kurs->webflags))) {
      return false;
    }

    return !$this->isKinderKurs50 || !$this->isKindAnmAllowedForUebermittlungsart;
  }

  public function determineAllowElterKind(): bool
  {
    if (!$this->determineAllowAnmeldung()) {
      return false;
    }

    if ($this->filterAnmeldeartenByWeb && ($this->kurs->webflags & \Kurs::WEBFLAG_ELTERNKIND) === 0) {
      return false;
    }

    return (!$this->isKinderKurs50 || !$this->isKindAnmAllowedForUebermittlungsart) && $this->isRechtAllowedElternKindOderKindKurs;
  }

  public function determineAllowKind(): bool
  {
    if (!$this->determineAllowAnmeldung()) {
      return false;
    }

    if ($this->filterAnmeldeartenByWeb && ($this->kurs->webflags & \Kurs::WEBFLAG_ELTERNKIND) === 0 && !$this->isKinderKurs50) {
      return false;
    }

    return \System::isKuferSql5() && $this->isKindAnmAllowedForUebermittlungsart && $this->isRechtAllowedElternKindOderKindKurs;
  }

  public function determineAllowMehrfach(): bool
  {
    if (!$this->determineAllowAnmeldung()) {
      return false;
    }

    if ($this->filterAnmeldeartenByWeb && ($this->kurs->webflags & \Kurs::WEBFLAG_MEHRFACH) === 0) {
      return false;
    }

    return (!$this->isKinderKurs50 || !$this->isKindAnmAllowedForUebermittlungsart) && $this->isMehrfachButtonAllowed;
  }

  public function determineAllowFirmen(): bool
  {
    if (!$this->determineAllowAnmeldung()) {
      return false;
    }

    if ($this->filterAnmeldeartenByWeb && ($this->kurs->webflags & \Kurs::WEBFLAG_FIRMA) === 0) {
      return false;
    }

    return (!$this->isKinderKurs50 || !$this->isKindAnmAllowedForUebermittlungsart) && $this->isFirmenButtonAllowed;
  }

  public static function createFromKurs(
    \Kurs $kurs,
    bool $isRechtAllowedElternKindOderKindKurs,
    bool $isMehrfachButtonAllowed,
    bool $isFirmenButtonAllowed,
    bool $filterAnmeldeartenByWeb
  ): AllowedAnmeldearten {
    $isKinderKurs50 = $kurs->isKinderkurs() && \System::isKuferSql5();
    $isKindAnmAllowedForUebermittlungsart = in_array(
      \AnmeldevorgangAdapter::getUebermittlungsart(),
      array(ANMELDUNG_MATOOL_DMZ, ANMELDUNG_MATOOL_MAIL, ANMELDUNG_MATOOL_FILE)
    );

    return new AllowedAnmeldearten(
      $kurs,
      $isKinderKurs50,
      $isKindAnmAllowedForUebermittlungsart,
      $isRechtAllowedElternKindOderKindKurs,
      $isMehrfachButtonAllowed,
      $isFirmenButtonAllowed,
      $filterAnmeldeartenByWeb
    );
  }
}