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

namespace Kufer\KuferTools\Oeffentlich\LoginAnfordern\SendeAutoLoginAnfordern;

use Kufer\KuferTools\Oeffentlich\LoginAnfordern\Utils\HandleLoginAnfordernEingaben as HandleLoginAnfordern;

class SendeAutoLoginAnfordernPresenter extends \Kufer\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  protected function getContent()
  {
    $view = $this->getView();
    if (in_array(HandleLoginAnfordern::SUCCESS_DBLOPTIN_EMAIL_VERSANDT, $this->useCaseResponse->statusCodes)
    || \SessionOperations::getVarValueWTIntern('AutoLoginErfolgreichAngefordert', false)) {
      \SessionOperations::setVarValueWTIntern('AutoLoginErfolgreichAngefordert', true);

      return $view->getNoData();
    }

    return parent::getContent();
  }

  protected function getView()
  {
    return new \Kufer\KuferTools\Oeffentlich\LoginAnfordern\AutoLoginAnfordernFormular\AutoLoginAnfordernFormularView($this->getViewModel());
  }

  protected function getViewModel()
  {
    $viewModel = new \Kufer\KuferTools\Oeffentlich\LoginAnfordern\AutoLoginAnfordernFormular\AutoLoginAnfordernFormularViewModel();

    $messages = array();
    foreach ($this->useCaseResponse->statusCodes as $statusCode) {
      $messages[] = $this->getMessageString($statusCode);
    }
    $message = implode('<br>', $messages);

    $viewModel->message = $message;
    $viewModel->captcha_link_erweiterung = \time();
    $viewModel->geschlecht = $this->useCaseResponse->geschlecht;
    $viewModel->name = $this->useCaseResponse->name;
    $viewModel->vorname = $this->useCaseResponse->vorname;
    $viewModel->email = $this->useCaseResponse->login;
    $viewModel->hinweis = \StringOperations::convertLinebreaks2HTML(
      \StringOperations::html_entity_decode(
        $this->useCaseResponse->hinweis
      )
    );
    $viewModel->https = $this->useCaseResponse->https;
    $viewModel->passwort = $this->useCaseResponse->passwort;
    $viewModel->passwortWiederholt = $this->useCaseResponse->passwortWiederholt;

    $viewModel->pwAnzahlZeichen = $this->useCaseResponse->pwAnzahlZeichen;
    $viewModel->pwZahlErforderlich = $this->useCaseResponse->pwZahlErforderlich;
    $viewModel->pwGrossKleinBuchstabenErforderlich = $this->useCaseResponse->pwGrossKleinBuchstabenErforderlich;
    $viewModel->pwSonderzeichenErforderlich = $this->useCaseResponse->pwSonderzeichenErforderlich;

    $viewModel->dozAutoLogin = $this->useCaseResponse->dozAutoLogin;
    $viewModel->tnAutoLogin = $this->useCaseResponse->tnAutoLogin;
    $viewModel->benutzergruppeDozSelected = $this->useCaseResponse->benutzergruppeDozSelected ? \HTMLOperations::getEmptyAttribute('selected') : '';
    $viewModel->benutzergruppeTnSelected = $this->useCaseResponse->benutzergruppeTnSelected ? \HTMLOperations::getEmptyAttribute('selected') : '';

    $viewModel->showDseZustimmung = $this->useCaseResponse->showDseZustimmung;
    $viewModel->dseZustimmungLink = $this->useCaseResponse->dseZustimmungLink;
    $viewModel->dseZustimmungChecked = $this->useCaseResponse->dseZustimmungChecked;

    $viewModel->freiesPflichtfeld = $this->useCaseResponse->freiesPflichtfeld;
    $viewModel->textFreiesPflichtfeld = $this->useCaseResponse->textFreiesPflichtfeld;
    $viewModel->freiesPflichtfeldChecked = $this->useCaseResponse->freiesPflichtfeldChecked ?? '';

    return $viewModel;
  }

  private function getMessageString($pStatus)
  {
    switch ($pStatus) {
      case HandleLoginAnfordern::SUCCESS_DBLOPTIN_EMAIL_VERSANDT:
        return 'Ihr neues Login muss zunächst aktiviert werden. Hierzu wurde eine E-Mail mit einem Aktivierungslink an Ihre hinterlegte E-Mail-Adresse gesandt.';
      case HandleLoginAnfordern::ERROR_OPTIN_NICHT_GEFUNDEN:
        return 'Der Aktivierungslink existiert nicht, oder ist nicht mehr gültig.';
      case HandleLoginAnfordern::ERROR_FEHLER_BEIM_DBLOPTIN_EMAIL_VERSAND:
        return 'Es ist ein Fehler beim Versand der E-Mail aufgetreten. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung.';
      case HandleLoginAnfordern::ERROR_KEIN_PASSWORT_ANGEGEBEN:
        return 'Bitte geben Sie Ihr Wunschpasswort an.';
      case HandleLoginAnfordern::ERROR_PASSWORT_NICHT_WIEDERHOLT:
        return 'Bitte wiederholen Sie zur Bestätigung Ihr gewünschtes Passwort.';
      case HandleLoginAnfordern::ERROR_PASSWORT_PASST_NICHT_ZU_WIEDERHOLUNG:
        return 'Das Passwort und das wiederholte Passwort stimmen nicht überein.';
      case HandleLoginAnfordern::ERROR_CAPTCHA_LEER_ODER_FALSCH:
        return 'Das Captcha wurde nicht korrekt gelöst.';
      case HandleLoginAnfordern::ERROR_PASSWORT_ZU_KURZ:
        return 'Ihr Passwort ist zu kurz.';
      case HandleLoginAnfordern::ERROR_PASSWORT_KEIN_SONDERZEICHEN:
        return 'Ihr Passwort enthält kein Sonderzeichen.';
      case HandleLoginAnfordern::ERROR_PASSWORT_KEINE_ZIFFER:
        return 'Ihr Passwort enthält keine Ziffer.';
      case HandleLoginAnfordern::ERROR_PASSWORT_KEINE_KLEINBUCHSTABEN:
        return 'Ihr Passwort enthält keinen Kleinbuchstaben.';
      case HandleLoginAnfordern::ERROR_PASSWORT_KEINE_GROSSBUCHSTABEN:
        return 'Ihr Passwort enthält keinen Großbuchstaben.';
      case HandleLoginAnfordern::ERROR_KEINE_ANREDE_ANGEGEBEN:
        return 'Bitte geben Sie Ihre Anrede an.';
      case HandleLoginAnfordern::ERROR_KEIN_LOGIN_ANGEGEBEN:
        return 'Bitte überprüfen Sie Ihre eingegebene E-Mail Adresse.';
      case HandleLoginAnfordern::ERROR_KEIN_NAME_ANGEGEBEN:
        return 'Bitte geben Sie Ihren Namen an.';
      case HandleLoginAnfordern::ERROR_KEIN_VORNAME_ANGEGEBEN:
        return 'Bitte geben Sie Ihren Vornamen an.';
      case HandleLoginAnfordern::ERROR_LOGIN_SCHON_VERGEBEN:
        return 'Dieses Login existiert schon - fordern Sie doch ein neues Passwort an.';
      case HandleLoginAnfordern::ERROR_KEINE_BENUTZERGRUPPE_ANGEGEBEN:
        return 'Bitte geben Sie Ihre Benutzergruppe an.';
      case HandleLoginAnfordern::ERROR_PASSWORT_ANFORDERN_NICHT_ERLAUBT_FUER_LDAP_LOGIN:
        return 'Ihr Login und Passwort werden über ein LDAP-Verzeichnis verwaltet. Passwortanforderung nicht möglich.';
      case HandleLoginAnfordern::ERROR_ZU_DATENSCHUTZ_NICHT_ZUGESTIMMT:
        return 'Sie müssen der Datenschutzerklärung zustimmen.';
      case HandleLoginAnfordern::ERROR_ZU_FREIES_PFLICHTFELD_NICHT_ZUGESTIMMT:
        if (\DBWorkBASysSettings::isMVHS()) {
          return 'Sie müssen den Nutzungsbedingungen zustimmen.';
        }

        return 'Sie müssen "' . $this->useCaseResponse->textFreiesPflichtfeld . '" zustimmen.';
      case HandleLoginAnfordern::ERROR_DOPPELT_ABSENDEN:
      default:
        return '';
    }
  }
}