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

namespace Kufer\Web\KuferTools\Utils\LDAP;

class LoginLDAPBremenLIS extends BaseLoginLDAP
{
  private const ATTR_SCHOOL = 'ucsschoolSchool';

  public function createTnFromLdap($username): int
  {
    $this->setupLdapHelper();
    $searchResult = $this->searchLehrkraftByUsername($username);

    $nachnameMitTitel = $this->ldapHelper->getFirstAttributeFromSearchResult($searchResult, 'sn');
    $posLastDot = strrpos($nachnameMitTitel, '.');

    if ($posLastDot !== false) {
      $titel = \StringOperations::substr($nachnameMitTitel, 0, $posLastDot + 1);
      $nachname = trim(\StringOperations::substr($nachnameMitTitel, $posLastDot + 1, strlen($nachnameMitTitel) - 1));
    } else {
      $titel = '';
      $nachname = $nachnameMitTitel;
    }

    $vorname = $this->ldapHelper->getFirstAttributeFromSearchResult($searchResult, 'givenName');
    $email = $this->ldapHelper->getFirstAttributeFromSearchResult($searchResult, 'mailprimaryaddress');
    $schulNr = $this->ldapHelper->getFirstAttributeFromSearchResult($searchResult, static::ATTR_SCHOOL);

    $tnAnlegen = new \Kufer\Web\KuferTools\Oeffentlich\LoginAnfordern\Utils\NeuesLoginAnlegenTeilnehmerLdapBremenLIS($titel, $schulNr);

    return $tnAnlegen->neuesLoginPerDmzAnlegen($username, '', $nachname, $vorname, '', '0', $email, '', \WebPasswordsUsers::AUTH_EXTERN_LDAP);
  }

  public function updateTnFromLdap($username): void
  {
    $this->setupLdapHelper();
    $searchResult = $this->searchLehrkraftByUsername($username);
    if ($searchResult === false) {
      \Logger::logg('Fehler: LDAP Teilnehmer-Login nicht in LDAP gefunden', 500);

      return;
    }

    $schulNr = $this->ldapHelper->getFirstAttributeFromSearchResult($searchResult, static::ATTR_SCHOOL);

    $dbwWebUsers = \DBWorkUser::getDefaultInstance();

    $user = $dbwWebUsers->getUserbyLogin($username);
    if (empty($user->id)) {
      \Logger::logg('Fehler: LDAP Teilnehmer-Login existiert nicht', 500);

      return;
    }

    $dbwTeilnehmer = \DBWorkTeilnehmer::getDefaultInstance();
    $origTeilnehmer = $dbwTeilnehmer->getTeilnehm($user->getTnrIdentifier());
    if ($origTeilnehmer->getIdentifier()->isEmpty()) {
      \Logger::logg('Fehler: LDAP Teilnehmer existiert nicht', 500);

      return;
    }

    if ($origTeilnehmer->schul_nr === $schulNr) {
      return; 
    }

    $changedTeilnehmer = clone $origTeilnehmer;
    $changedTeilnehmer->schul_nr = $schulNr;

    $changedFields = array('schul_nr');

    try {
      \TeilnehmerAPI::correctTeilnehmer(new \Tuple($changedTeilnehmer, $changedFields, $origTeilnehmer), 'update');
      $dbwTeilnehmer2 = \DBWorkTeilnehmer2::getDefaultInstance();
      $dbwTeilnehmer2->insertOrUpdateTeilnehm2($changedTeilnehmer, true, true);
    } catch (\Exception $ex) {
      \Logger::loggException($ex, 500);

      return;
    }
  }
}