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

namespace Kufer\KuferTools\Mitarbeiter\KursUebersicht\Detailsreiter\Teilnehmer\HandleAnmeldungByMv\StatusMessage;

use Kufer\KuferTools\Utils\StatusMessages;

abstract class HandleStatusMessage
{
  public function getStatusMessageContainer($resultObj)
  {
    $statusmessagecontainer = new StatusMessages\StatusMessageContainer();
    if ($resultObj->technischerFehler) {
      $statusmessagecontainer->addStatusMessageObj(StatusMessages\StatusMessage::getErrorMessageObj($this->getTechnischerFehlerMessage()));
    }
    if ($resultObj->firmaConflict) {
      $statusmessagecontainer->addStatusMessageObj(StatusMessages\StatusMessage::getWarningMessageObj($this->getFirmaConflictMessage()));
    }
    if (count($resultObj->success) > 0) {
      $tnSuccessList = $this->getNamenArrayFromBelegungsArray($resultObj->success);
      $statusmessagecontainer->addStatusMessageObj(StatusMessages\StatusMessage::getSuccessMessageObj($this->getSuccessMessage(implode(', ', $tnSuccessList))));
    }
    if (count($resultObj->error) > 0) {
      $tnErrorList = $this->getNamenArrayFromBelegungsArray($resultObj->error);
      $statusmessagecontainer->addStatusMessageObj(StatusMessages\StatusMessage::getErrorMessageObj($this->getErrorMessage(implode(', ', $tnErrorList))));
    }
    if (count($resultObj->conflicted) > 0) {
      $tnConflictedList = $this->getNamenArrayFromBelegungsArray($resultObj->conflicted);
      $statusmessagecontainer->addStatusMessageObj(StatusMessages\StatusMessage::getErrorMessageObj($this->getConflictedMessage(implode(', ', $tnConflictedList))));
    }
    if (count($resultObj->mailVersandFehler) > 0) {
      $mailVersandFehler = $this->getNamenArrayFromBelegungsArray($resultObj->mailVersandFehler);
      $statusmessagecontainer->addStatusMessageObj(StatusMessages\StatusMessage::getErrorMessageObj($this->getMailFehlerTnMessage(implode(', ', $mailVersandFehler))));
    }
    if ($resultObj->mailTnFirmaNichtInBelegung) {
      $statusmessagecontainer->addStatusMessageObj(StatusMessages\StatusMessage::getErrorMessageObj($this->getTnFirmaBelegungNichtInBelegungMessage()));
    }

    return $statusmessagecontainer;
  }

  protected function getSuccessMessage($tnSuccessList)
  {
    return 'Ändern des Status der Anmeldung für folgende Teilnehmer war erfolgreich:' . $tnSuccessList;
  }

  protected function getErrorMessage($tnErrorList)
  {
    return 'Beim Ändern des Status der Anmeldung für folgende Teilnehmer trat ein Fehler auf:' . $tnErrorList;
  }

  protected function getConflictedMessage($tnConflictedList)
  {
    return 'Die Daten der Anmeldung folgender Teilnehmer stimmen nicht mit KuferSQL überein: ' . $tnConflictedList;
  }

  protected function getTechnischerFehlerMessage()
  {
    return 'Beim Akzpetieren/Ablehnen der Anmeldung ist ein technischer Fehler aufgetreten.';
  }

  protected function getFirmaConflictMessage()
  {
    return 'Es sind Unterschiede zwischen den Anmeldedaten und den hinterlegten Daten aufgetreten, die erst synchronisiert werden müssen.<br> Dies geschieht automatisch. Bitte prüfen Sie in einer Stunde, ob Ihre Aktion erfolgreich war.';
  }

  protected function getMailFehlerTnMessage($tnMailFehler)
  {
    return 'Für folgende Teilnehmer konnte keine E-Mail versendet werden: ' . $tnMailFehler;
  }

  protected function getTnFirmaBelegungNichtInBelegungMessage()
  {
    return 'Fehler beim Mailversand: Für einen Teilnehmer konnte der zugehörige Elternteil nicht gefunden werden. Es wurde keine Mail verschickt.';
  }

  private function getNamenArrayFromBelegungsArray($belegungen)
  {
    return array_map(function($bel) {
      return $bel->teilnehmer->name . ' ' . $bel->teilnehmer->vorname;
    }, $belegungen);
  }
}