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

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

class SendeLoginAnfordernPresenter extends \Kufer\Web\KuferTools\Basis\Presenter\MitRahmenPresenter
{
  protected function getContent()
  {
    $view = $this->getView();
    if (in_array(SendeLoginAnfordernUseCase::SUCCESS_EMAIL_VERSANDT, $this->useCaseResponse->statusCodes)
            || \SessionOperations::getVarValueWTIntern('loginErfolgreichAngefordert', false)) {
      \SessionOperations::setVarValueWTIntern('loginErfolgreichAngefordert', true);

      return $view->getNoData();
    }

    return parent::getContent();
  }

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

  protected function getViewModel()
  {
    $viewModel = new \Kufer\Web\KuferTools\Oeffentlich\LoginAnfordern\LoginAnfordernFormular\LoginAnfordernFormularViewModel();

    $messages = array();
    foreach ($this->useCaseResponse->statusCodes as $statusCode) {
      $messages[] = $this->getMessageString($statusCode);

      $varname = $this->getFormErrorForInput($statusCode);
      if ($varname !== '') {
        $viewModel->{$varname . 'Error'} = true;
      }
    }
    $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->telefonnummer = $this->useCaseResponse->telefonnummer;
    $viewModel->email = $this->useCaseResponse->email;
    $viewModel->bemerkung = $this->useCaseResponse->bemerkung;
    $viewModel->userGroup = $this->useCaseResponse->userGroup;
    $viewModel->plz = $this->useCaseResponse->plz;
    $viewModel->strasse = $this->useCaseResponse->strasse;
    $viewModel->hausnummer = $this->useCaseResponse->hausnummer;
    $viewModel->ort = $this->useCaseResponse->ort;
    $viewModel->hinweis = \StringOperations::convertLinebreaks2HTML(
      \StringOperations::html_entity_decode(
        $this->useCaseResponse->hinweis
      )
    );
    $viewModel->https = $this->useCaseResponse->https;
    $viewModel->showDseZustimmung = $this->useCaseResponse->showDseZustimmung;
    $viewModel->dseZustimmungLink = $this->useCaseResponse->dseZustimmungLink;
    $viewModel->dseZustimmungChecked = $this->useCaseResponse->dseZustimmungChecked;
    $viewModel->benutzergruppen = $this->useCaseResponse->benutzergruppen;
    $viewModel->benutzergruppenCount = $this->useCaseResponse->benutzergruppenCount;

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

    return $viewModel;
  }

  private function getFormErrorForInput($pStatus)
  {
    switch ($pStatus) {
      case SendeLoginAnfordernUseCase::ERROR_KEINE_BENUTZER_GRUPPE_ANGEGEBEN:
        return 'userGroup';
      case SendeLoginAnfordernUseCase::ERROR_KEIN_NAME_ANGEGEBEN:
        return 'name';
      case SendeLoginAnfordernUseCase::ERROR_KEIN_VORNAME_ANGEGEBEN:
        return 'vorname';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_TELEFON_NR_ANGEGEBEN:
        return 'telefonnummer';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_EMAIL_ANGEGEBEN:
        return 'email';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_STRASSE_ANGEGEBEN:
        return 'strasse';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_HAUSNUMMER_ANGEGEBEN:
        return 'hausnummer';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_PLZ_ANGEGEBEN:
        return 'plz';
      case SendeLoginAnfordernUseCase::ERROR_KEIN_ORT_ANGEGEBEN:
        return 'ort';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_ANREDE_ANGEGEBEN:
        return 'geschlecht';
      default:
        return '';
    }
  }

  private function getMessageString($pStatus)
  {
    switch ($pStatus) {
      case SendeLoginAnfordernUseCase::SUCCESS_EMAIL_VERSANDT:
        return 'Ihre Anfrage auf ein KuferTools-Login wurde erfolgreich versandt.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_EMAIL_VERSANDT:
        return 'Ihre Anfrage auf ein KuferTools-Login konnte nicht versendet werden. Bitte versuchen Sie es erneut, oder wenden Sie sich an die Einrichtung.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_BENUTZER_GRUPPE_ANGEGEBEN:
        return 'Bitte geben Sie Ihre Benutzergruppe an.';
      case SendeLoginAnfordernUseCase::ERROR_KEIN_NAME_ANGEGEBEN:
        return 'Bitte geben Sie Ihren Namen an.';
      case SendeLoginAnfordernUseCase::ERROR_KEIN_VORNAME_ANGEGEBEN:
        return 'Bitte geben Sie Ihren Vornamen an.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_TELEFON_NR_ANGEGEBEN:
        return 'Bitte geben Sie Ihre Telefonnummer an.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_EMAIL_ANGEGEBEN:
        return 'Bitte überprüfen Sie Ihre eingegebene E-Mail Adresse.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_STRASSE_ANGEGEBEN:
        return 'Bitte geben Sie Ihre Straße an.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_HAUSNUMMER_ANGEGEBEN:
        return 'Bitte geben Sie Ihre Hausnummer an.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_PLZ_ANGEGEBEN:
        return 'Bitte geben Sie Ihre PLZ an.';
      case SendeLoginAnfordernUseCase::ERROR_KEIN_ORT_ANGEGEBEN:
        return 'Bitte geben Sie Ihren Ort an.';
      case SendeLoginAnfordernUseCase::ERROR_CAPTCHA_LEER_ODER_FALSCH:
        return 'Das Captcha wurde nicht korrekt gelöst.';
      case SendeLoginAnfordernUseCase::ERROR_KEINE_ANREDE_ANGEGEBEN:
        return 'Bitte geben Sie eine Anrede an.';
      case SendeLoginAnfordernUseCase::ERROR_ZU_DATENSCHUTZ_NICHT_ZUGESTIMMT:
        return 'Sie müssen der Datenschutzerklärung zustimmen.';
      case SendeLoginAnfordernUseCase::ERROR_ZU_FREIES_PFLICHTFELD_NICHT_ZUGESTIMMT:
        if (\DBWorkBASysSettings::isMVHS()) {
          return 'Sie müssen den Nutzungsbedingungen zustimmen.';
        }

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

  protected function getSeitenTitel(): string
  {
    return 'Login anfordern';
  }
}