
package de.ivu.elect.business.exchange.entity;

import de.ivu.elect.business.datei.entity.ServerFileType;
import de.ivu.elect.business.konfiguration.entity.AbstractKonfigurationLoader;
import de.ivu.elect.business.konfiguration.entity.ElectKonfigurationWerte;

import javax.annotation.Nullable;

public enum DateiExportArt {

  // COMMON
  BENUTZER_EXPORT,
  BENUTZER_EINSATZORT_EXPORT,
  LOKALISIERUNG_EXPORT,
  STAAT_EXPORT,
  STATISTIK_LAUF_EXPORT,
  STAATEN_GRUPPE_EXPORT,
  GEODATA_ORT_EXPORT,
  BERUF_EXPORT,
  WERTELISTEN_EXPORT,
  GEBIET_EXPORT,
  GEBIETSGRUPPIERUNG_EXPORT,
  GRUPPE_EXPORT,
  INTERNET_KONFIGURATION_EXPORT,
  KONFIGURATION_EXPORT,
  WAHL_PARAMETER_EXPORT,
  ROLLE_EXPORT,
  EMAIL_VORLAGE_EXPORT,
  KONTODATEN_EXPORT { // == AUSZAHLUNG_EXPORT

    @Override
    public Integer overrideMaxEintraege(Integer max, AbstractKonfigurationLoader konfigurationLoader) {
      return MAX_EINTRAEGE_UNBEGRENZT; // ELECT-9672
    }
  },
  ENTSCHAEDIGUNGSART_EXPORT,
  // WUS
  STIMMEN_EXPORT,
  SITZE_EXPORT,
  STIMMZETTEL_EXPORT,
  TESTDATEN_EXPORT,
  WAHLVORSCHLAG_EXPORT,
  WAHLVORSCHLAGS_PERSON_EXPORT,
  KANDIDATUR_EXPORT,
  WAHL_EXPORT,
  WAHL_FUER_WES_EXPORT {

    @Nullable
    @Override
    public Integer overrideMaxEintraege(Integer max, AbstractKonfigurationLoader konfigurationLoader) {
      if (max != null && max > 0) {
        Long config = konfigurationLoader.resolveLongValueOptional(ElectKonfigurationWerte.WES_EXPORT_MAX_ANZAHL);

        if (config != null && config >= 0) {
          return config.intValue();
        }

        return 1; // Fallback maximal ein Eintrag, da Dateien extrem groß...
      }

      return max;
    }
  },
  GRUPPE_IM_GEBIET_EXPORT,
  WAHL_METADATEN_EXPORT,
  UNTERSTUETZER_STATUSUEBERSICHT_EXPORT,
  // WOS
  WAHLTERMIN_EXPORT,
  WAHLHELFER_EXPORT,
  WAHLHELFEREINSATZ_EXPORT,
  PRAESENTATION_EXPORT,
  WAHLLOKAL_EXPORT,
  BRIEFWAHLTISCH_EXPORT,
  ORGANISATIONSEINHEITEN_EXPORT,
  // WAS
  KANDIDATUREN_GEWAEHLTE_EXPORT,
  ERGEBNIS_EXPORT,
  STIMMEINGABE_EXPORT,
  STIMMEINGABE_PLAUSI_KONFIGURATION_EXPORT,
  STIMMEINGABE_ALS_DOKUMENT_EXPORT,
  BEKANNTMACHUNG_ERGEBNIS_EXPORT,
  ERSTE_SCHNELLMELDUNG_V2_EXPORT,
  ZAEHLLISTE_LISTENSTIMMEN_V4_EXPORT,
  ZWEITE_SCHNELLMELDUNG_V5_EXPORT,
  ZWEITE_SCHNELLMELDUNG_V6_EXPORT,
  GESAMTERGEBNIS_V7_EXPORT,
  NIEDERSCHRIFT_WAHLAUSSCHUSS_EXPORT,
  ERGEBNIS_PRAESENTATION_EXPORT,
  GEBIETSGEOMETRIE,
  // WVZ
  WAHLRECHTSKRITERIUM_EXPORT,
  WAHL_PHASE_EXPORT,
  STIMMZETTELGEBIET_EXPORT,
  WAEHLERVERZEICHNIS_EXPORT,
  WAHLBENACHRICHTIGUNG_EXPORT,
  WAHLSCHEINANTRAG_QUITTUNG_EXPORT,
  WAHLSCHEINANTRAG_EXPORT,
  WAHLSCHEIN_EXPORT,
  WAHLSTATISTIK_KENNZEICHEN_EXPORT,
  WVZ_UNIONS_BUERGER,
  WAHLBETEILIGUNG_VERLAUF,
  WAHLBETEILIGUNG_AUSWERTUNG,

  // ???
  GENERIERTES_DOKUMENT {

    @Override
    public ServerFileType getServerFileType() {
      return ServerFileType.GENERIERTES_DOKUMENT;
    }
  },
  PRUEFKRITERIEN_EXPORT,
  SPERRLISTE_EXPORT,
  STANDORT_EXPORT,
  WAHL_KONFIGURATION_EXPORT,
  RECHTE_KONFIGURATION_EXPORT,
  WES_STIMMZETTEL,

  ;

  public static final int MAX_EINTRAEGE_UNBEGRENZT = Integer.MAX_VALUE;

  private DateiExportArt() {
  }

  public ServerFileType getServerFileType() {
    return ServerFileType.EXPORTIERTE_DATEI;
  }

  @Nullable
  public Integer overrideMaxEintraege(Integer max, AbstractKonfigurationLoader konfigurationLoader) {
    return max;
  }
}
