
package de.ivu.elect.presentation.stimmeingabe.menu;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.jee.presentation.menu.MenuEntry;
import de.ivu.elect.jee.presentation.menu.SeparatorMenuEntry;
import de.ivu.elect.presentation.auffaelligkeit.menu.StimmeingabeAuffaelligkeitMenuItemEntry;
import de.ivu.elect.presentation.gebietsbaum.menu.AnzahlWahlberechtigteExportMenuItemEntry;
import de.ivu.elect.presentation.gebietsbaum.menu.AnzahlWahlberechtigteImportMenuItemEntry;
import de.ivu.elect.presentation.gebietsbaum.menu.AnzahlWahlberechtigteSearchMenuItemEntry;
import de.ivu.elect.presentation.niederschrift.menu.NiederschriftKorrekturSearchMenuItemEntry;

public class StimmeingabeMenuBuilder implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient SeparatorMenuEntry separatorMenuEntry;

  @Inject
  private transient StimmeingabePlausiKonfigurationSearchMenuItemEntry stimmeingabePlausiKonfigurationSearchMenuItemEntry;

  @Inject
  private transient StimmeingabePlausiKonfigurationImportMenuItemEntry stimmeingabePlausiKonfigurationImportMenuItemEntry;

  @Inject
  private transient StimmeingabePlausiKonfigurationExportMenuItemEntry stimmeingabePlausiKonfigurationExportMenuItemEntry;

  @Inject
  protected transient StimmeingabeErfassenMenuItemEntry stimmeingabeErfassenMenuItemEntry;

  @Inject
  protected transient ErgebniseingangSearchMenuItemEntry ergebniseingangSearchMenuItemEntry;

  @Inject
  private transient StimmeingabeWesMenuItems stimmeingabeWesMenuItems;


  @Inject
  private transient StimmeingabeAuffaelligkeitMenuItemEntry stimmeingabeAuffaelligkeitMenuItemEntry;

  @Inject
  private transient StimmeingabeHochgerechnetMenuItemEntry stimmeingabeHochgerechnetMenuItemEntry;

  @Inject
  private transient FiktiveErgebniseingaengeErzeugenMenuItemEntry fiktiveErgebniseingaengeErzeugenMenuItemEntry;

  @Inject
  protected transient StimmeingabeImportMenuItemEntry stimmeingabeImportMenuItemEntry;

  @Inject
  private transient StimmeingabeImportStatusSearchMenuItemEntry stimmeingabeImportStatusSearchMenuItemEntry;

  @Inject
  private transient StimmeingabeExportMenuItemEntry stimmeingabeExportMenuItemEntry;

  @Inject
  private transient StimmeingabeDocumentByErgebniseingangExportMenuItemEntry stimmeingabeDocumentByErgebniseingangExportMenuItemEntry;

  @Inject
  private transient StimmeingabeDocumentByErgebnisDatenExportMenuItemEntry stimmeingabeDocumentByErgebnisDatenExportMenuItemEntry;

  @Inject
  private transient AnzahlWahlberechtigteSearchMenuItemEntry anzahlWahlberechtigteSearchMenuItemEntry;

  @Inject
  private transient AnzahlWahlberechtigteImportMenuItemEntry anzahlWahlberechtigteImportMenuItemEntry;

  @Inject
  private transient AnzahlWahlberechtigteExportMenuItemEntry anzahlWahlberechtigteExportMenuItemEntry;

  @Inject
  private transient NiederschriftKorrekturSearchMenuItemEntry niederschriftKorrekturSearchMenuItemEntry;

  public StimmeingabeMenuBuilder() {
    super();
  }

  public List<MenuEntry> getSubMenuEntriesSorted() {
    List<MenuEntry> result = new ArrayList<>();

    result.add(stimmeingabeErfassenMenuItemEntry);
    result.add(niederschriftKorrekturSearchMenuItemEntry);
    result.add(ergebniseingangSearchMenuItemEntry);

    result.addAll(stimmeingabeWesMenuItems.getWesMenuItems()); // ELECTKOM-756

    addAnzahlWahlberechtigteMenuItemEntries(result);

    result.add(separatorMenuEntry);
    result.add(stimmeingabePlausiKonfigurationSearchMenuItemEntry);
    result.add(stimmeingabePlausiKonfigurationImportMenuItemEntry);
    result.add(stimmeingabePlausiKonfigurationExportMenuItemEntry);

    result.add(separatorMenuEntry);
    addStimmeingabePrognoseMenuItemEntries(result);

    result.add(separatorMenuEntry);
    addStimmeingabeDocumentExportMenuItemEntries(result);

    result.add(separatorMenuEntry);
    addStimmeingabeExchangeMenuItemEntries(result);

    result.add(separatorMenuEntry);
    result.add(fiktiveErgebniseingaengeErzeugenMenuItemEntry);

    return result;
  }

  // ELECTKOM-213
  protected void addAnzahlWahlberechtigteMenuItemEntries(List<MenuEntry> result) {
    result.add(separatorMenuEntry);
    result.add(anzahlWahlberechtigteSearchMenuItemEntry);
    result.add(anzahlWahlberechtigteImportMenuItemEntry);
    result.add(anzahlWahlberechtigteExportMenuItemEntry);
  }

  protected void addStimmeingabePrognoseMenuItemEntries(List<MenuEntry> result) {
    result.add(stimmeingabeAuffaelligkeitMenuItemEntry);
    result.add(stimmeingabeHochgerechnetMenuItemEntry);
  }

  protected void addStimmeingabeDocumentExportMenuItemEntries(List<MenuEntry> result) {
    result.add(stimmeingabeDocumentByErgebniseingangExportMenuItemEntry);
    result.add(stimmeingabeDocumentByErgebnisDatenExportMenuItemEntry);
  }

  protected void addStimmeingabeExchangeMenuItemEntries(List<MenuEntry> result) {
    result.add(stimmeingabeImportStatusSearchMenuItemEntry);
    result.add(stimmeingabeImportMenuItemEntry);
    addStimmeingabenExportieren(result);
  }

  protected void addStimmeingabenExportieren(List<MenuEntry> result) {
    result.add(stimmeingabeExportMenuItemEntry);
  }
}
