
package de.ivu.elect.business.internet.control;

import de.ivu.elect.business.internet.entity.InternetPraesentationZentraleAblage;
import de.ivu.elect.business.internet.entity.InternetPraesentationZentraleAblagePfad;
import de.ivu.elect.business.konfiguration.control.AbstractKonfigurationInit;
import de.ivu.elect.business.konfiguration.entity.ElectKonfigurationWerte;
import de.ivu.elect.business.konfiguration.entity.Konfiguration;
import de.ivu.elect.business.konfiguration.entity.KonfigurationInitContext;
import de.ivu.elect.business.konfiguration.entity.MandantKonfigurationWerte;
import de.ivu.elect.business.mandant.control.MandantSupport;
import de.ivu.elect.business.praesentation.entity.PraesentationUploadArt;
import de.ivu.elect.business.praesentation.entity.PresentationServletStatus;
import de.ivu.elect.jee.faces.Messages;

import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class WasPraesentationKonfigurationInit extends AbstractKonfigurationInit {

  @Inject
  private transient MandantSupport mandantSupport;

  @Inject
  private transient Messages messages;

  public WasPraesentationKonfigurationInit() {
    super();
  }

  @Override
  protected Collection<Konfiguration> createDefaultParameters(KonfigurationInitContext konfigurationInitContext) {

    // ELECT-8047 kein default Verzeichnis, muss explizit angegeben werden
    //    VerzeichnisResult ablageverzeichnisDirectoryResult = tryCreateUserHomeDirectory("Verzeichnis für Internet-Exporte",
    //        "praesentation");
    //
    //    // ELECT-7629
    //    LOG.info("Status vorgegebenes Verzeichnis Internet-Exporte '" + ablageverzeichnisDirectoryResult.getVerzeichnisName() + "': " + ablageverzeichnisDirectoryResult.getVerzeichnisStatus());

    List<Konfiguration> result = new ArrayList<>();
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_INTERNET_AKTIVIERT,
        isPraesentationAktiviert()); // falls kundenspezifische Wünsche -> dort konfigurieren
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_INTERNET_MINIMALE_PAUSE_IN_SEKUNDEN,
        getPauseInSekunden()); // falls kundenspezifische Wünsche -> dort konfigurieren
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_UPLOAD_ART, getExportUploadArt().name()); // falls kundenspezifische Wünsche -> dort konfigurieren
    add(result, ElectKonfigurationWerte.PRAESENTATION_GENERIEREN_ANZAHL_SLOTS, getAnzahlGenerierenSlots()); // falls kundenspezifische Wünsche -> dort
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_UPLOAD_ASYNCHRON_ANZAHL_SLOTS, getAnzahlUploadSlots());
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_UPLOAD_ASYNCHRON_WARTEZEIT_IN_SEKUNDEN, 0L);
    add(result, ElectKonfigurationWerte.PRAESENTATION_SERVLET_STATUS,
        getPresentationServletStatus().name()); // falls kundenspezifische Wünsche -> dort konfigurieren
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_ZENTRAL_EINSTELLUNG, getDefaultZentralerExportEinstellung());
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_ZENTRAL_PFAD_EINSTELLUNG, getDefaultZentralerExportEinstellungPfad());
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_ZENTRAL_URL_PRAEFIX, "");
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_ABLAGEVERZEICHNIS, ""/* ablageverzeichnisDirectoryResult.getVerzeichnisNameFuerDefaultKonfiguration() */);
    add(result, ElectKonfigurationWerte.PRAESENTATION_EXPORT_ALS_ZIP_DATEI, true /* ELECT-6403 Vorschau jetzt auch als ZIP möglich=>nicht mehr notwendig tausende Dateien zu entpacken */);

    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_LOGO_URL, getDefaultLogoUrl());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_LOGO_ALTERNATIV_TEXT, getDefaultLogoAlternativText());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_LOGO_LINK_URL, getDefaultLogoLinkUrl());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_LOGO_LINK_LABEL, getDefaultLogoLinkLabel());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_ADDITIONAL_LINK_ALTERNATIV_TEXT, getDefaultAdditionalLinkAlternativText());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_ADDITIONAL_LINK_URL, getDefaultAdditionalLinkUrl());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_ADDITIONAL_LINK_LABEL, getDefaultAdditionalLinkLabel());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_COPYRIGHT, getDefaultCopyright());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_MENU_LINKS, getDefaultMenuLinks());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_ADDITIONAL_LINKS, getDefaultAdditionalLinks());
    add(result, MandantKonfigurationWerte.INTERNET_PLATZHALTER_FOOTER_LINKS, getDefaultFooterLinks());

    return result;
  }

  protected InternetPraesentationZentraleAblagePfad getDefaultZentralerExportEinstellungPfad() {
    return InternetPraesentationZentraleAblagePfad.MANDANTNUMMER_WAHLTERMINNUMMER_DATUM_WAHLART_BAUM;
  }

  protected InternetPraesentationZentraleAblage getDefaultZentralerExportEinstellung() {
    return InternetPraesentationZentraleAblage.UPLOAD_SERVICE;
  }

  protected Long getAnzahlGenerierenSlots() {
    return 1L; // mehr muss individuell konfiguriert werden
  }

  private Long getAnzahlUploadSlots() {
    if (mandantSupport.isMandantenUnterstuetzt()) {
      return 8L /*willkürlich*/; // Relevant bei Multi-Mandanten-Systemen
    }
    return 1L;
  }

  protected PresentationServletStatus getPresentationServletStatus() {
    return PresentationServletStatus.OFFEN;
  }

  protected PraesentationUploadArt getExportUploadArt() {
    if (mandantSupport.isMandantenUnterstuetzt()) {
      return PraesentationUploadArt.ASYNCHRON; // ELECT-8098 relevant bei Multi-Mandanten-Systemen
    }
    return PraesentationUploadArt.SYNCHRON;
  }

  protected String getDefaultAdditionalLinks() {
    return messages.getMessageForMessageKey("internet.praesentation.default.AdditionalLinks");
  }

  protected String getDefaultMenuLinks() {
    return messages.getMessageForMessageKey("internet.praesentation.default.MenuLinks");
  }

  protected String getDefaultFooterLinks() {
    return messages.getMessageForMessageKey("internet.praesentation.default.FooterLinks");
  }

  protected String getDefaultCopyright() {
    return messages.getMessageForMessageKey("internet.praesentation.default.Copyright");
  }

  protected String getDefaultAdditionalLinkAlternativText() {
    return messages.getMessageForMessageKey("internet.praesentation.default.AdditionalLinkAlternativText");
  }

  protected String getDefaultAdditionalLinkUrl() {
    return messages.getMessageForMessageKey("internet.praesentation.default.AdditionalLinkUrl");
  }

  protected String getDefaultAdditionalLinkLabel() {
    return messages.getMessageForMessageKey("internet.praesentation.default.AdditionalLinkLabel");
  }

  protected String getDefaultLogoLinkLabel() {
    return messages.getMessageForMessageKey("internet.praesentation.default.LogoLinkLabel");
  }

  protected String getDefaultLogoUrl() {
    return messages.getMessageForMessageKey("internet.praesentation.default.LogoUrl");
  }

  protected String getDefaultLogoLinkUrl() {
    return messages.getMessageForMessageKey("internet.praesentation.default.LogoLinkUrl");
  }

  protected String getDefaultLogoAlternativText() {
    return messages.getMessageForMessageKey("internet.praesentation.default.LogoAlternativText");
  }

  protected int getPauseInSekunden() {
    return 0;
  }

  protected boolean isPraesentationAktiviert() {
    return true;
  }
}
