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

namespace Kufer\Web\Classes\Api\Helpers;


class ZsaHelper
{
  
  protected $dbwBkBvTn;

  public function __construct($pDbwBkBvtn)
  {
    $this->dbwBkBvTn = $pDbwBkBvtn;
  }

  public function mailAnBv($subject, $message, $bkbvtn, $einstellungMoeglichstWenigeEmailsBeruecksichtigen)
  {
    $this->dbwBkBvTn->newSearch();
    $this->dbwBkBvTn->fromobject->zb = $bkbvtn->zb;
    $this->dbwBkBvTn->fromobject->ds = $bkbvtn->ds;
    $this->dbwBkBvTn->fromobject->typ = 'BV';
    $bkbvtnBvs = $this->dbwBkBvTn->getByFilter();

    if (count($bkbvtnBvs) > 0) {

      
      $bvTnAry = array();
      foreach ($bkbvtnBvs as $bkbvtnBv) {
        $bvTnAry[$bkbvtnBv->teilnehmer->id] = $bkbvtnBv->teilnehmer;
      }

      $emailResult = array();
      foreach ($bvTnAry as $bvTn) {
        if ($einstellungMoeglichstWenigeEmailsBeruecksichtigen) {
          if ($this->moeglichstWenigEmailsAnBvBkTn($bvTn->id)) {
            continue;
          }
        }

        $emailAdresseBv = $bvTn->getVarValue('email_anzeige');

        $emailResult[] = \smtpMail::sendStandardHtmlMail($emailAdresseBv, $subject, $message);
      }

      
      return in_array(true, $emailResult, true);
    }

    return false;
  }

  public function sendMailHinzufuegen($bkbvtn, $wblogin = null)
  {
    $betreff = 'Antrag auf Registrierung im Bildungsportal (LEL)';

    
    $ansprache = 'Herr';
    if ($wblogin != null) {
      if ($wblogin->geschlecht == 'W') {
        $ansprache = 'Frau';
      }
      $name = $wblogin->name . ' ' . $wblogin->vorname;
    } else {
      if ($bkbvtn->teilnehmer->geschlecht == 'W') {
        $ansprache = 'Frau';
      }
      $name = $bkbvtn->teilnehmer->getVarValue('name_vorname_ohne_komma');
    }
    $tnName = $ansprache . ' ' . $name;

    $inhalt = $this->getHinzufuegenText($tnName, $bkbvtn->zielbereich->text, $bkbvtn->dienststelle->teilnehmer->getVarValue('name_zusatz'));

    return $this->mailAnBv($betreff, $inhalt, $bkbvtn, true);
  }

  private function getHinzufuegenText($pTnName, $pZielbereich, $pDienststelle)
  {
    $result = $pTnName . ' hat sich für den Zielbereich ' . $pZielbereich . ' in der Dienststelle ' . $pDienststelle . ' registriert.<br>';
    $result .= 'Bitte prüfen Sie die Registrierung und Zuordnung zu der/den Zielgruppe/n. ' . $pTnName . ' wird über eine automatisierte E-Mail über die Genehmigung bzw. Ablehnung informiert.<br><br>';
    $result .= $this->getLinkKuferTools();

    return $result;
  }

  
  public function moeglichstWenigEmailsAnBvBkTn($tnr)
  {
    $dbwLogin = new \DBWorkUser();
    $webUsers = $dbwLogin->getUsersByTnr($tnr);
    if (count($webUsers) > 0) {
      $dbwUserSettings = new \DBWorkWebUsersSettings();
      $userSettings = $dbwUserSettings->getSettingsByUser($webUsers[0]->getIdentifier());

      return $userSettings->zsa_moeglichst_wenige_emails; 
    } else {
      return false;
    }
  }

  public static function getLinkKuferTools()
  {
    $sett = \AllgSettingsAPI::getAllgSettings();
    if ($sett->linkkufertools == '') {
      \Logger::logg('ZSA - Link zu den KuferTools ist nicht hinterlegt', 6662);
    }

    return '<a href="' . $sett->linkkufertools . '">Link zu KuferTools</a>';
  }

  
  public static function isOeffentlicherKurs($pKnr)
  {
    $dbwCat = \DBWorkCategories::getDefaultInstance();
    $sonderkat = $dbwCat->getCategoriesByKurs($pKnr, 2);

    return !empty($sonderkat);
  }

  public static function getZsaZielbereiche()
  {
    static $cache = null;
    if (is_null($cache)) {
      $dbwHlGrundSys = new \DBWorkHLGrundSys(1, true);
      $zbRootId = $dbwHlGrundSys->getFeldWert('ZSA_ZB_ROOTID');
      if ($zbRootId > 0) { 
        $dbwCategories = new \DBWorkCategories(1, true);
        $cats = $dbwCategories->getCategoryStructured($zbRootId);
        
        
        $dbwZsaBkBvTn = new \DBWorkZsaBkBvTn(1, true);
        $zbDs = $dbwZsaBkBvTn->getMapZielbereichDienststelle();
        $count = count($cats->subCategories);
        for ($i = 0; $i < $count; $i++) {
          if (!array_key_exists($cats->subCategories[$i]->id, $zbDs)) {
            unset($cats->subCategories[$i]);
          }
        }
        $cache = $cats;
      } else {
        $cache = null;
      }
    }

    return $cache;
  }
}