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

namespace Kufer\Web\KuferTools\Oeffentlich\LoginAnfordern\Utils;

use Kufer\Web\Classes\Addfunctions\Guid;
use Kufer\Web\Classes\Identifier\Identifier;

class NeuesLoginAnlegenDozenten extends NeuesLoginAnlegen
{
  protected function getDmzFeature(): int
  {
    return \AbgleichAPI::ABGLEICH_NEUES_DOZLOGIN;
  }

  protected function setWebuserFields(\Benutzer $webUser, ?Guid $personGuid, int $personNr): \Benutzer
  {
    $webUser->dnr_guid = $personGuid;
    $webUser->dnr = $personNr;

    return $webUser;
  }

  protected function getTyp(): string
  {
    return 'D';
  }

  protected function getXml4Dmz(\Personn $person, \Benutzer $webUser): \XMLNode
  {
    $dozXml = $person->ToXml(array(), true, array(), 'dozent');
    $webUserXml = $webUser->ToXml(array(), true, array(), 'web_user');
    $neuePersonDirektAnlegen = $this->neuePersonDirektAnlegen() ? 'W' : 'F';

    $message = new \XMLNode('neues_doz_login');
    $message->addChild($dozXml);
    $message->addChild($webUserXml);
    $message->addChild(new \XMLNode('neuen_doz_direkt_anlegen', $neuePersonDirektAnlegen));

    return $message;
  }

  protected function getPersonObj(string $pGeschlecht, string $pName, string $pVorname, string $pEmail, string $pDseUnterschriebenDatum): \Personn
  {
    $dozent = new \Dozent();
    $dozent->setValue2Var('name', $pName);
    $dozent->setValue2Var('vorname', $pVorname);
    $dozent->setValue2Var('email', $pEmail);
    $dozent->setValue2Var('email_anzeige', $pEmail);
    $dozent->setValue2Var('geschlecht', $pGeschlecht);
    $dozent->setValue2Var('dse_unterschrieben_datum', $pDseUnterschriebenDatum);

    return $dozent;
  }

  protected function getPersonFromDb($guid): \Personn
  {
    $dbwDoz = new \DBWorkDozenten(1, true);

    return $dbwDoz->getPerson(Identifier::fromGuid($guid));
  }

  protected function insertPerson($person): ?\Personn
  {
    $dbwDoz = new \DBWorkDozenten(1, true);
    $person->id = $dbwDoz->insertDozent($person);

    try {
      \DozentenAPI::insertDmzMappingAnhandGuid($person);
    } catch (\Exception $e) {
      \Logger::logg("Neues Login anlegen per DMZ: Beim Einfügen des Mappings ist ein Fehler aufgetreten'", 200);
      $dbwDoz->deleteDozent($person->id);

      return null;
    }

    return $dbwDoz->getPerson($person->getIdentifier(), true);
  }

  
  protected function getwebToolsStdTempl(): array
  {
    $dbwWebToolsStdTempl = new \DBWorkWebToolsStdTempl(1, true);

    return $dbwWebToolsStdTempl->get4Doz();
  }

  protected function neuePersonDirektAnlegen(): bool
  {
    $toolSettings = \ToolSettingsAPI::getToolSettings(0);

    return $toolSettings->dozAutoLoginNeueDozDirektAnlegen;
  }
}