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

namespace Kufer\Web\KuferTools\Utils\FilterSettings\Teilnehmer;

use Kufer\Web\KuferTools\Utils\FilterSettings\FilterSettingsCompositor;
use Kufer\Web\KuferTools\Utils\FilterSettings\IFilterSettings;

class TeilnehmerFilterSettingsHelper
{
  private function __construct()
  {
  }

  public static function createBasicFilterSettings(): IFilterSettings
  {
    return new FilterSettingsCompositor();
  }

  public static function createBasicUebersichtFilterSettings(): IFilterSettings
  {
    return new FilterSettingsCompositor(
      new NotEquals0FilterSettings()
    );
  }

  public static function createVeranstalterTeilnehmerUebersichtFilterSettings(\ToolSettings $toolSettings, \Benutzer $user): IFilterSettings
  {
    return new FilterSettingsCompositor(
      static::createBasicUebersichtFilterSettings()
    );
  }

  public static function createVeranstalterTeilnehmerAnmeldungUebersichtFilterSettings(\ToolSettings $toolSettings, \Benutzer $user): IFilterSettings
  {
    $additional = array();
    if (\DBWorkBASysSettings::isSalzburgBildungswerk()) {
      $additional[] = new SalzburgBildungswerkVeranstalterFilterSettings($user);
    }

    return new FilterSettingsCompositor(
      static::createBasicUebersichtFilterSettings(),
      ...$additional
    );
  }

  public static function createVeranstalterTeilnehmerAnmeldungUebersichtVonFirmenanmeldungFilterSettings(\ToolSettings $toolSettings, \Benutzer $user, int $firmenTnr): IFilterSettings
  {
    return new FilterSettingsCompositor(
      static::createVeranstalterTeilnehmerAnmeldungUebersichtFilterSettings($toolSettings, $user),
      new TeilnehmerVonFirmenanmeldungFirmenanmeldungFilterSettings($firmenTnr)
    );
  }

  
  public static function createMitarbeiterTeilnehmerUebersichtFilterSettings(\ToolSettings $toolSettings, \Benutzer $user): IFilterSettings
  {
    $additional = array();
    if ($toolSettings->useBereichsRechte ?? false) {
      $additional[] = new BereichsrechteFilterSettings($user);
    }

    return new FilterSettingsCompositor(
      static::createBasicUebersichtFilterSettings(),
      ...$additional
    );
  }

  
  public static function createMitarbeiterTeilnehmerAnmeldungUebersichtFilterSettings(\ToolSettings $toolSettings, \Benutzer $user): IFilterSettings
  {
    $additional = array();
    if ($toolSettings->useBereichsRechteTeilnehmer ?? false) {
      $additional[] = new BereichsrechteFilterSettings($user);
    }

    return new FilterSettingsCompositor(
      static::createBasicUebersichtFilterSettings(),
      ...$additional
    );
  }

  public static function createMitarbeiterTeilnehmerAnmeldungUebersichtVonFirmenanmeldungFilterSettings(\ToolSettings $toolSettings, \Benutzer $user, int $firmenTnr): IFilterSettings
  {
    return new FilterSettingsCompositor(
      static::createMitarbeiterTeilnehmerAnmeldungUebersichtFilterSettings($toolSettings, $user),
      new TeilnehmerVonFirmenanmeldungFirmenanmeldungFilterSettings($firmenTnr)
    );
  }

  public static function createMitarbeiterTeilnehmerAnmeldungUebersichtVonKindernFilterSettings(\ToolSettings $toolSettings, \Benutzer $user, int $firmenTnr): IFilterSettings
  {
    return new FilterSettingsCompositor(
      static::createMitarbeiterTeilnehmerAnmeldungUebersichtFilterSettings($toolSettings, $user),
      new TeilnehmerVonKinderBeziehungFilterSettings($firmenTnr)
    );
  }

  public static function createTeilnehmerVorgesetzterAusBeziehungTeilnehmerUebersicht(\ToolSettings $toolSettings, \Benutzer $user): IFilterSettings
  {
    return new FilterSettingsCompositor(
      static::createBasicUebersichtFilterSettings(),
      new VorgesetzterAusBelegungenFilterSettings($user->getTnrIdentifier())
    );
  }

  public static function createTeilnehmerVorgesetzterInTeilnehmerTeilnehmerUebersicht(\ToolSettings $toolSettings, \Benutzer $user): IFilterSettings
  {
    return new FilterSettingsCompositor(
      static::createBasicUebersichtFilterSettings(),
      new VorgesetzterInTeilnehmerFilterSettings($user->getTnrIdentifier())
    );
  }
}