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

namespace Kufer\Web\KuferTools\Veranstalter\Utils;

use Kufer\Web\Classes\Identifier\Identifier;
use Kufer\Web\Classes\Identifier\IdentifierFactory;

class VeranstalterUtils
{
  
  public const TYPE_DOZENT_LEITER = 'L';

  
  public const TYPE_DOZENT_LEITER_UND_DOZENT = 'Y';

  
  public const SESSION_VERANSTALTER_NUM = 'veranstalter_leiter_num';

  
  public static function getVeranstalterDnr($user = null, $refreshCache = false)
  {
    static $cache = null;
    if (!\is_null($cache) && !$refreshCache) {
      return $cache;
    }

    $user = $user ?? \SessionOperations::getCurrentWebToolsUser();
    $dbwBeziehung = new \DBWorkBeziehung(1, true);
    $dnrs = $dbwBeziehung->getVeranstalterDnrs($user);
    if (empty($dnrs)) {
      
      $cache = max($user->dnr, 0);
    } else {
      $num = \SessionOperations::getVarValueWTIntern(self::SESSION_VERANSTALTER_NUM);
      if ($num !== '' && isset($dnrs[(int)$num])) {
        $cache = $dnrs[(int)$num];
      } else {
        
        $dnr = \ArrayOperations::firstValue($dnrs);
        $cache = $dnr;
      }
    }

    return $cache;
  }

  
  public static function getVeranstalterId($user = null, $refreshCache = false): Identifier
  {
    return IdentifierFactory::createFromIdIfNecessary(static::getVeranstalterDnr($user, $refreshCache));
  }

  public static function getVeranstaltungsLeiterTypen(): array
  {
    if (\DBWorkBASysSettings::isSalzburgBildungswerk()) {
      return array(static::TYPE_DOZENT_LEITER, static::TYPE_DOZENT_LEITER_UND_DOZENT);
    } else {
      return array(static::TYPE_DOZENT_LEITER);
    }
  }

  
  public static function setVeranstalterDnr($num): void
  {
    $user = \SessionOperations::getCurrentWebToolsUser();
    $dbwBeziehung = new \DBWorkBeziehung(1, true);
    $dnrs = $dbwBeziehung->getVeranstalterDnrs($user);
    if (\is_numeric($num) && $num >= 0 && $num < \count($dnrs)) {
      \SessionOperations::setVarValueWTIntern(self::SESSION_VERANSTALTER_NUM, $num);
      self::getVeranstalterDnr($user, true); 
    }
  }

  public static function getVeranstalterDozent()
  {
    $dnr = self::getVeranstalterDnr();
    $dbwDozent = new \DBWorkDozenten(1, true);

    return $dbwDozent->getDozent($dnr);
  }

  public static function getTypenVeranstalter()
  {
    return array('F', 'M');
  }

  public static function getTypenKooperationspartner()
  {
    return array('I', 'G');
  }

  public static function getTypenNichtDozent()
  {
    $result = array_merge(self::getTypenVeranstalter(), self::getTypenKooperationspartner());
    if (\DBWorkBASysSettings::isLudwigsburgEvKbw()) {
      $result[] = 'O';
    }
    if (\DBWorkBASysSettings::isSalzburgBildungswerk()) {
      $result[] = static::TYPE_DOZENT_LEITER; 
    }

    return $result;
  }

  public static function getTnrsVonMitarbeiterUndLeiter($veranstalterDnr)
  {
    $dbwBeziehung = new \DBWorkBeziehung(1, true);

    return $dbwBeziehung->getMitarbeterUndLeiterTeilnehmerNummernVonVeranstalterArray(array($veranstalterDnr));
  }

  
  public static function isVKurs($pKnr)
  {
    return \StringOperations::startsWith($pKnr, 'V');
  }

  public static function getVeranstalterTnr()
  {
    $dnr = self::getVeranstalterDnr();
    if ($dnr > 0) {
      $dbwBeziehung = new \DBWorkBeziehung(1, true);
      $tnr = $dbwBeziehung->getVeranstalterTnr($dnr);
      if ($tnr > 0) {
        return $tnr;
      }
    }

    return 0;
  }
}