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

namespace Kufer\Web\KuferTools\Allgemein\PersoenlicheDaten\AenderePersoenlicheDaten;

use Kufer\Web\KuferTools\Allgemein\PersoenlicheDaten\AenderePersoenlicheDaten\EMail\AenderePersoenlicheDatenTnEMailView;
use Kufer\Web\KuferTools\Basis\View\ViewSight;
use Kufer\Web\KuferTools\Utils\TeilnehmerHandler\TeilnehmerUpdater;

class AenderePersoenlicheDatenTnUseCase extends AenderePersoenlicheDatenUseCase
{
  public static function getToolSectionId()
  {
    return 89;
  }

  protected function isBearbeitenAllowed(): bool
  {
    return $this->isRechtAllowed('89.0.1');
  }

  
  protected function getOrigPerson(): \Personn
  {
    $user = $this->getUser();
    $dbworkTeilnehmer = new \DBWorkTeilnehmer();

    return $dbworkTeilnehmer->getTeilnehm($user->tnr, true);
  }

  
  protected function updatePerson(\Personn $pPerson): void
  {
    if (\SessionOperations::isReplikat()) {
      $dbwTN = new \DBWorkTeilnehmer(1, true);
      
      
      \TeilnehmerAPI::updateTeilnehmerRepoDirekt($dbwTN, $pPerson, true);
      \StammBvAPI::bereinigeBankdatenAnhandTeilnehmer($pPerson, true, false);

      if (\DBWorkBASysSettings::isBremenLIS()) {
        \SessionOperations::logInCurrentToolsTnAsStammhoerer();
      }
    }
  }

  
  protected function aendereDatenDirekt(\Personn $pOrigPerson, \Personn $pPerson, array $pChangedFields): string
  {
    $teilnehmerUpdater = new TeilnehmerUpdater($this->toolSettings);
    list($person, $changedFields) = $teilnehmerUpdater->preUpdateHook($pPerson, $pChangedFields);
    $statusCodeTnUpdater = $teilnehmerUpdater->saveTeilnehmer($pOrigPerson, $person, $changedFields);

    return $this->getStatusCode($statusCodeTnUpdater);
  }

  private function getStatusCode(string $pStatusCodePersonUpdater): string
  {
    $statusCode = '';
    if ($pStatusCodePersonUpdater === TeilnehmerUpdater::SUCCESS_TEILNEHMERDATEN_ERFOLGREICH_UEBERMITTELT) {
      $statusCode = static::SUCCESS_EMAIL_VERSENDET;
    }
    if ($pStatusCodePersonUpdater === TeilnehmerUpdater::INFO_TEILNEHMERDATEN_NICHT_VERAENDERT) {
      $statusCode = static::INFO_KEINE_AENDERUNGEN_VORGENOMMEN;
    }
    if ($pStatusCodePersonUpdater === TeilnehmerUpdater::ERROR_UEBERTRAGUNG_FEHLGESCHLAGEN) {
      $statusCode = static::ERROR_EMAIL_NICHT_VERSENDET;
    }
    if ($pStatusCodePersonUpdater === TeilnehmerUpdater::ERROR_TEILNEHMERDATEN_NICHT_AKTUELL) {
      $statusCode = static::ERROR_PERSONENDATEN_NICHT_AKTUELL;
    }

    \Logger::logg('Fehler beim Ändern der persönlichen Daten (Teilnehmer-Nr. ' . static::getUser()->tnr . '). Statuscode: ' . $statusCode, 20);

    if ($statusCode === '') {
      \Logger::logg(__METHOD__ . ': Unbekannten Statuscode erhalten (ggf. Methode erweitern)! Statuscode: ' . $pStatusCodePersonUpdater, 250);
    }

    return $statusCode;
  }

  protected function getDbwFreiWaehlbareeingabefelder(): ?\DBWorkFreiWaehlbareEingabefelder
  {
    return new \DBWorkFreiWaehlbareEingabefelder4Teilnehmer();
  }

  protected function getPersonTypKurz(): string
  {
    return 'T';
  }

  protected function getBenutzergruppe4ColumnValues(): string
  {
    return 'teilnehmer';
  }

  protected function isFieldCheckbox(string $pFieldname): bool
  {
    $tn = new \Teilnehmer();

    return $tn->getTyp($pFieldname) === \DatamodulVarType::TYPE_BOOL_WF;
  }

  protected function aenderungenDirektUebermitteln(): bool
  {
    return $this->toolSettings->aenderungenDirektUebermittelnTeilnehmer;
  }

  protected function sollInfoMailAnEinrichtungGesendetWerden(): bool
  {
    return !$this->toolSettings->keineInfoAnEinrichtungSendenTeilnehmer;
  }

  protected function createEMailView($person, $origPerson): ViewSight
  {
    return new AenderePersoenlicheDatenTnEMailView($this->createEMailViewModel($person, $origPerson));
  }
}