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

import java.util.Arrays;
import java.util.List;

import de.ivu.elect.business.security.Customer;


import static de.ivu.elect.business.security.Customer.BASE;
import static de.ivu.elect.business.security.Customer.COMMON;
import static de.ivu.elect.business.security.Customer.DD_WOS;
import static de.ivu.elect.business.security.Customer.DD_WUS;
import static de.ivu.elect.business.security.Customer.DESTATIS_WAS;
import static de.ivu.elect.business.security.Customer.KOM_RP_WAS;
import static de.ivu.elect.business.security.Customer.MUC_WOS;
import static de.ivu.elect.business.security.Customer.NL_WUS;
import static de.ivu.elect.business.security.Customer.WAS;
import static de.ivu.elect.business.security.Customer.WES;
import static de.ivu.elect.business.security.Customer.WUS;
import static de.ivu.elect.business.security.Customer.WVP_ANBINDUNG;
import static de.ivu.elect.business.security.Customer.WVZ;
import static java.util.stream.Collectors.toList;

public enum SystemLogQuelle {

  @Deprecated // Legacy Nicht verwenden
  SYSTEM(BASE),
  GELOESCHT(BASE),
  SECURITY(BASE),
  VIRUS_SCAN(BASE),
  EXPORTER(BASE),
  KONFIGURATION(BASE),
  FILE_CLEANUP(BASE),
  PROTOKOLL_CLEANUP(BASE),
  DB_CLEANUP(BASE),
  EMAIL_SENDEN(BASE),
  TAG_UPDATES(BASE),
  MANDANT_EXPORT(BASE),
  MANDANT_IMPORT(BASE),
  KONFIGURATION_GEAENDERT(BASE),

  // WVZ
  ANSCHRIFTEN_DIRECTORY(WVZ),
  NACHTKREISEL(WVZ),
  STATISTIK_LAUF(WVZ),
  STATISTIK_LAUF_NACH_INITIALER_WAEHLERVERZEICHNIS_SORTIERUNG(WVZ),

  MELDEDATEN_AENDERUNG_VERARBEITEN(WVZ),
  MELDEDATEN_PAKET_VERARBEITEN(WVZ),
  MELDEDATEN_INITIALER_IMPORT(WVZ),
  MELDEDATEN_ALLE_LOESCHEN(WVZ),

  WAEHLERVERZEICHNIS_AKTUALISIEREN(WVZ),
  WAEHLERVERZEICHNIS_SORTIEREN(WVZ),

  WAHLBENACHRICHTIGUNG_UNZUSTELLBAR_IMPORTER(WVZ),

  WAHLSCHEINATRAEGE_ZUORDNEN(WVZ),
  WAHLSCHEINATRAEGE_BERECHTIGUNG_PRUEFEN(WVZ),
  WAHLSCHEINANTRAG_ONLINE_IMPORTER(WVZ),
  WAHLSCHEINANTRAG_POSTALISCH_IMPORTER(WVZ),
  WAHLSCHEINANTRAG_NICHT_AUSWERTBAR_IMPORTER(WVZ),

  WAHLSCHEIN_VERSAND_IMPORTER(WVZ),
  WAHLSCHEIN_UNZUSTELLBAR_IMPORTER(WVZ),
  WAHLSCHEIN_EXPORTER(WVZ),
  WAEHLERVERZEICHNIS_EINTRAEGE_STICHWAHL_KOPIEREN(WVZ),

  WAHLTERMIN_LOESCHEN(WVZ),
  // COMMON
  VERANSTALTUNG_IMPORTER(COMMON),
  PERSONENPRUEFUNG(COMMON),

  // WUS
  EXTERNER_ABGLEICH(WUS),
  WVP_BENUTZERKONTEN_CLEANUP(WVP_ANBINDUNG),

  // WAS
  PRAESENTATION_GENERIEREN(WAS),
  PRAESENTATION_BEREITSTELLEN(WAS),
  ERGEBNISSEQUENZNUMMER_SETZEN(WAS),
  AWERTE_UEBERNEHMEN(WAS),
  ZWISCHENERGEBNISBERECHNUNG(WAS),
  REPLIKATION(WAS),
  WEBSOCKET_NOTIFY_CLIENT(WAS),
  AUTOMATISCHER_DATEI_IMPORT(WAS),
  STIMMEINGABE_DATEIEN_IMPORTER(WAS),
  ERGEBNIS_DATEI_VOM_BUNDESWAHLLEITER(WAS),

  LWL_STIMMEINGABE_DATEIEN_ABRUFEN(KOM_RP_WAS),
  LWL_STIMMEINGABE_DATEIEN_IMPORTER(KOM_RP_WAS),

  // WES
  WES_STIMMZETTEL_BACKUP(WES),
  
  MUC_WAHLHELFER_ANLEGEN_WEBSERVICE(MUC_WOS),
  DD_WAHLHELFER_ONLINE_IMPORTER(DD_WOS),
  UNTERSTUETZER_ANZAHL_IMPORTER(DD_WUS),
  DESTATIS_F_DATEIEN_IMPORTER(DESTATIS_WAS),
  DESTATIS_ERG_DATEI_EXPORT(DESTATIS_WAS),

  STIMMENUEBERGABE(WAS),
  WAHL_EXPORT(WAS),
  WAHLLOKALSYSTEM(WAS),
  WAHLLOKALSYSTEM_STATUSMELDUNG(WAS),

  NL_REIHENFOLGE(NL_WUS);

  private final Customer customer;

  private SystemLogQuelle(Customer customer) {
    this.customer = customer;
  }

  public Customer getCustomer() {
    return customer;
  }

  public boolean isForCustome(Customer customer) {
    return customer.equals(getCustomer()) || customer.getContainedCustomers().contains(getCustomer());
  }

  public static List<SystemLogQuelle> getValuesForCustomer(Customer customer) {
    return Arrays.stream(values()).filter(q -> q.isForCustome(customer)).collect(toList());
  }
}
