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

namespace Kufer\KuferTools\Allgemein\PersoenlicheDaten\AenderePersoenlicheDaten;

use Kufer\KuferTools\Allgemein\PersoenlicheDaten\AenderePersoenlicheDaten\EMail\AenderePersoenlicheDatenDozEMailView;
use Kufer\KuferTools\Basis\DozentenInfo\UpdateDozent\HandleDozentUpdate\HandleDozentUpdateUseCase;
use Kufer\KuferTools\Basis\View\ViewSight;
use Kufer\Web\KuferTools\Utils\Spezial\MVHSUtils;

class AenderePersoenlicheDatenDozUseCase extends AenderePersoenlicheDatenUseCase
{
  public static function getToolSectionId()
  {
    return 90;
  }

  protected function isBearbeitenAllowed()
  {
    return $this->isRechtAllowed('90.0.1');
  }

  protected function getOrigPerson()
  {
    $user = $this->getUser();
    $dbworkDozent = new \DBWorkDozenten();
    $dozent = $dbworkDozent->getDozent($user->dnr, true);
    $dozent->freieCheckbox = '';

    return $dozent;
  }

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

  protected function sendMitteilung($person, $origPerson)
  {
    if (\DBWorkBASysSettings::isMVHS()) {
      $diffFields = $person->getDiffFields($origPerson);
      if (in_array('krit9', $diffFields)) {
        $dmzStatus = $this->updateNutzungsbedingungenBestaetigenDirekt($person, $origPerson);
        if ($dmzStatus == HandleDozentUpdateUseCase::SUCCESS_DOZENT_ERFOLGREICH_UEBERMITTELT) {
          $origPerson->krit9 = $person->krit9;
          $this->updatePersonReplikat($origPerson);
          $statusCode = parent::SUCCESS_EMAIL_VERSENDET;
          if (count($diffFields) > 1) {
            $statusCode = parent::sendMitteilung($person, $origPerson);
          }
        } else {
          $statusCode = parent::ERROR_EMAIL_NICHT_VERSENDET;
        }
      } else {
        $statusCode = parent::sendMitteilung($person, $origPerson);
      }

      return $statusCode;
    }

    return parent::sendMitteilung($person, $origPerson);
  }

  protected function updatePersonReplikat(\Dozent $pOrigDozent): void
  {
    if (\SessionOperations::isReplikat()) {
      $dbwDozenten = new \DBWorkDozenten(1, true);
      $dozentTmp = clone($pOrigDozent);
      unset($dozentTmp->freieCheckbox);
      $dbwDozenten->updateDozent($dozentTmp, true);
    }
  }

  protected function updatePerson($dozent)
  {
    if (\SessionOperations::isReplikat()) {
      $dbwdozent = new \DBWorkDozenten();
      $dozentTmp = clone($dozent);
      unset($dozentTmp->freieCheckbox);
      $dbwdozent->updateDozent($dozentTmp, true);
      $this->updateDozBezirk($dozentTmp);
    }
  }

  protected function getPersonTypKurz()
  {
    return 'D';
  }

  protected function getBenutzergruppenName()
  {
    return 'Dozent';
  }

  protected function getBenutzergruppe4ColumnValues()
  {
    return 'dozent';
  }

  
  private function updateDozBezirk($pDozent)
  {
    $dbwDozBezirk = new \DBWorkDozBezirk(1, true);
    $dbwDozBezirk->deleteDozBezirkByDozentId(($pDozent->id));

    foreach ($pDozent->einsatzbezirke as $dozBezirk) {
      $dbwDozBezirk->insertOne($dozBezirk, '', 'id', true, false);
    }
  }

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

  protected function updateNutzungsbedingungenBestaetigenDirekt(\Dozent $pDozent, \Dozent $pOrigDozent): string
  {
    if (\SessionOperations::isDmzBetrieb()) {
      try {
        $changedFields = array('krit9');
        $dozentTuple = new \Tuple($pDozent, $changedFields, $pOrigDozent);
        \DozentenAPI::correctDozenten($dozentTuple, 'update');

        return HandleDozentUpdateUseCase::SUCCESS_DOZENT_ERFOLGREICH_UEBERMITTELT;
      } catch (\AbgleichApiException $aae) {
        \Logger::logg('Dozentenkorrektur - folgende Exception ist aufgetreten: ' . $aae->getMessage() . "\n" . ' [' . $aae->getTraceAsString() . ']', 200);
        if ($aae->errorType == \AbgleichApiResult::CONFLICT) {
          return HandleDozentUpdateUseCase::ERROR_DOZENTDATEN_NICHT_AKTUELL;
        } else {
          return HandleDozentUpdateUseCase::ERROR_UEBERTRAGUNG_FEHLGESCHLAGEN;
        }
      } catch (\Exception $e) {
        \Logger::logg('Dozentenkorrektur - folgende Exception ist aufgetreten: ' . $e->getMessage() . "\n" . ' [' . $e->getTraceAsString() . ']', 200);

        return HandleDozentUpdateUseCase::INFO_DOZENTDATEN_NICHT_VERAENDERT;
      }
    }

    return '';
  }
}