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

import de.ivu.elect.business.datei.entity.ServerFileType;
import de.ivu.elect.business.wahl.entity.WahlPK;
import de.ivu.elect.business.wahl.entity.WahlterminPK;

import javax.annotation.Nullable;

public enum DateiImportArt {

  BENUTZER_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }

  },
  BENUTZER_EINSATZORT_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }

  },
  ENTSCHAEDIGUNGSART_IMPORT,
  LOKALISIERUNG_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }

  },
  STAAT_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }
  },
  STAATEN_GRUPPE_IMPORT,
  GEODATA_ORT_IMPORT,
  BERUF_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }

  },
  WERTELISTEN_IMPORT,
  KONFIGURATION_IMPORT,
  WAHL_PARAMETER_IMPORT,
  ROLLE_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }

  },
  EMAIL_VORLAGE_IMPORT {

    @Override
    public Integer overrideMaxEintraege(Integer max) {
      return null; // Emailvorlagen nicht löschen
    }

  },
  GBAV_BATCH_IMPORT,
  GBAV_ERROR_IMPORT,
  GEBIET_IMPORT,
  GEBIETSGRUPPIERUNG_IMPORT,
  GEBIET_STIMMBEZIRKE_IMPORT,
  GEBIET_GEOMETRIE_IMPORT, // WAS
  ERGEBNIS_PRAESENTATION_IMPORT,
  GRUPPE_IMPORT,
  INTERNET_KONFIGURATION_IMPORT,
  WAHLVORSCHLAG_IMPORT,
  WAHLVORSCHLAGS_PERSON_IMPORT,
  WVP_BENUTZER_DATEN_IMPORT,
  GRUPPE_IM_GEBIET_IMPORT,
  STIMMERGEBNISSE_IMPORT,
  SITZE_IMPORT,
  STIMMEINGABE_IMPORT,
  STIMMEINGABE_PLAUSI_KONFIGURATION_IMPORT,
  GEWAEHLTE_IMPORT,
  WAHLLOKAL_IMPORT, // WOS
  BRIEFWAHLTISCH_IMPORT, // WOS
  STANDORT_IMPORT, // WOS
  ORGANISATIONSEINHEIT_IMPORT, // WOS
  WAHL_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }
  },
  WAHLTERMIN_IMPORT {

    @Override
    protected boolean isWahlOderWahlterminAbhaengig() {
      return false; // ELECTKOM-986
    }
  },
  ANZAHL_WAHLBERECHTIGTE_IMPORT, // WAS
  SPERRLISTE,
  DOKUMENT_VORLAGE {

    @Override
    public ServerFileType getServerFileType() {
      return ServerFileType.DOKUMENTVORLAGE;
    }

    @Override
    public Integer overrideMaxEintraege(Integer max) {
      return null; // Dokumentvorlagen nicht löschen
    }
  },
  WAHLHELFER_IMPORT,
  UNTERSTUETZER_IMPORT,
  PRUEFKRITERIUM_IMPORT, // WOS
  WAHL_KONFIGURATION_IMPORT,
  RECHTE_KONFIGURATION_IMPORT,
  ANSCHRIFTEN_EINTRAG_IMPORT, // WVZ
  MELDEDATEN_EINTRAG_IMPORT, // WVZ
  WAHLRECHTSKRITERIUM_IMPORT, // WVZ
  WAHL_PHASE_IMPORT, // WVZ
  STIMMZETTELGEBIET_IMPORT, // WVZ
  WAHLSTATISTIK_KENNZEICHEN_IMPORT, // WVZ
  WAHLSCHEINANTRAG_IMPORT {

    @Nullable
    @Override
    public Integer overrideMaxEintraege(Integer max) {
      return max; // wichtig für WVZ-Prozesse immer aufheben
    }
  }, // WVZ
  WAHLSCHEIN_IMPORT {

    @Nullable
    @Override
    public Integer overrideMaxEintraege(Integer max) {
      return max; // wichtig für WVZ-Prozesse immer aufheben
    }
  }, // WVZ
  WAHLBENACHRICHTIGUNG_IMPORT {

    @Nullable
    @Override
    public Integer overrideMaxEintraege(Integer max) {
      return max; // wichtig für WVZ-Prozesse  immer aufheben
    }

  }, // WVZ
  STATISTIKLAUF_IMPORT, // WVZ
  VERANSTALTUNG_IMPORT,
  TEILNAHME_IMPORT {

    @Nullable
    @Override
    public Integer overrideMaxEintraege(Integer max) {
      return max; // wichtig für WOS-Prozesse immer aufheben
    }
  },
  WAHLBETEILIGUNG_VERLAUF,
  WAHLBETEILIGUNG_AUSWERTUNG,
  ;

  private DateiImportArt() {
  }

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

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

  @Nullable
  public WahlterminPK korrigiereWahltermin(WahlterminPK wahlterminPK) {
    if (isWahlOderWahlterminAbhaengig()) {
      return wahlterminPK;
    }

    return null;
  }

  @Nullable
  public WahlPK korrigiereWahl(WahlPK wahlPK) {
    if (isWahlOderWahlterminAbhaengig()) {
      return wahlPK;
    }

    return null;
  }

  protected boolean isWahlOderWahlterminAbhaengig() {
    return true;
  }
}
