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

namespace Kufer\Web\KuferTools\Utils\Spezial;

class BLAKUtils
{
  private function __construct()
  {
  }

  
  public static function isKursZertifikatsfortbildungsKurs(\ToolSettings $toolSettings, \Kurs $kurs): bool
  {
    if (!\DBWorkBASysSettings::isBlak()) {
      return false; 
    }

    $freidef = static::getFreidefFieldKursZertifikatsfortbildungFromToolSettings($toolSettings);
    if (is_null($freidef)) {
      return false;
    }

    return ($kurs->{$freidef} ?? 'F') === 'W';
  }

  
  public static function getFreidefFieldBelegungZertifikatsfortbildungFromToolSettings(\ToolSettingsBASys $toolSettings): ?string
  {
    
    $fieldNum = $toolSettings->freidefBelegungSaveZertifikatsfortbildung;
    if ($fieldNum <= 0) {
      return null;
    }
    $fieldNum -= 1; 

    $hlfreidef = \DBWorkFreiWaehlbareEingabefelder4Belegung::getDefaultInstance();
    $freidefs = $hlfreidef->getFreiWaehlbareFelder();
    if (!array_key_exists($fieldNum, $freidefs) || empty($freidefs[$fieldNum]->id)) {
      return null;
    }

    return $hlfreidef->getVarNameInDatamodul($freidefs[$fieldNum]->id);
  }

  
  public static function getFreidefFieldKursZertifikatsfortbildungFromToolSettings(\ToolSettingsBASys $toolSettings): ?string
  {
    
    $fieldNum = $toolSettings->freidefKursShouldShowZertifikatsfortbildung;
    if ($fieldNum <= 0) {
      return null;
    }
    $fieldNum -= 1; 

    $hlfreidef = \DBWorkFreiWaehlbareEingabefelder4Kurs::getDefaultInstance();
    $freidefs = $hlfreidef->getFreiWaehlbareFelder();
    if (!array_key_exists($fieldNum, $freidefs)) {
      return null;
    }

    return $hlfreidef->getVarNameInDatamodul($freidefs[$fieldNum]->id);
  }

  public static function getTeilnehmerBundeslandFreidef(\ToolSettings $toolSettings): ?\FreiWaehlbareEingabefelder
  {
    if (!\DBWorkBASysSettings::isBlak()) {
      return null;
    }

    
    $fieldNum = $toolSettings->freidefKursBlakBundesland;
    if ($fieldNum <= 0) {
      return null;
    }
    $fieldNum -= 1; 

    $hlfreidef = \DBWorkFreiWaehlbareEingabefelder4Kurs::getDefaultInstance();
    $freidefs = $hlfreidef->getFreiWaehlbareFelder();
    if (!array_key_exists($fieldNum, $freidefs)) {
      return null;
    }

    
    

    $fielddef = $freidefs[$fieldNum];
    if ($fielddef->bezeichnung !== '' && in_array($fielddef->typ, array(SQL_FREIDEF_TYP_CHECKBOX, SQL_FREIDEF_TYP_TEXT, ''))) {
      return $fielddef;
    }

    return null;
  }

  
  public static function isTeilnehmerBundeslandAllowed(\ToolSettings $toolSettings, \Kurs $kurs, \Teilnehmer $teilnehmer): ?bool
  {
    
    

    $fielddef = static::getTeilnehmerBundeslandFreidef($toolSettings);
    if (is_null($fielddef)) {
      return null;
    }

    $settings = \DBWorkBASysSettings::getDefaultInstance()->getSettings();

    $val = trim($kurs->{'kursauswahl' . ($fielddef->id)} ?? '');
    if ($fielddef->typ == SQL_FREIDEF_TYP_CHECKBOX) {
      if ($val === 'W') {
        return $teilnehmer->bundesland === 'Bayern';
      }

      return null;
    }

    if ($val === '') {
      return null;
    }

    
    $valAry = array_map('\\trim', explode(',', $val));

    return in_array($teilnehmer->bundesland, $valAry);
  }
}