
package de.ivu.elect.presentation.ergebnis.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.ergebniskonflikt.menu.ErgebnisKonfliktSearchMenuItemEntry;
import de.ivu.elect.presentation.gruppe.menu.GruppeKumulierteStimmenAnzeigenMenuItemEntry;
import de.ivu.elect.presentation.gruppe.menu.GruppeNachErfassungsgebietStimmenAnzeigenGrafischMenuItemEntry;
import de.ivu.elect.presentation.gruppe.menu.GruppeNachErfassungsgebietStimmenAnzeigenTabellarischMenuItemEntry;
import de.ivu.elect.presentation.kandidatur.menu.KandidaturGewaehltSearchMenuItemEntry;

public class WasErgebnisMenuBuilder implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient SeparatorMenuEntry separator;

  @Inject
  protected transient ErgebnisStatusMenuItemEntry ergebnisStatusMenuItemEntry;

  @Inject
  protected transient ErgebnisLogEintragAnzeigenMenuItemEntry ergebnisLogEintragAnzeigenMenuItemEntry;

  @Inject
  protected transient BesonderheitAnzeigenMenuItemEntry besonderheitAnzeigenMenuItemEntry;

  @Inject
  protected transient DHondtQuotientListenImGebietSearchMenuItemEntry dHondtQuotientListenImGebietSearchMenuItemEntry;

  @Inject
  protected transient DHondtQuotientListenInGruppeSearchMenuItemEntry dHondtQuotientListenInGruppeSearchMenuItemEntry;

  @Inject
  protected transient DHondtQuotientPolitischeGruppeSearchMenuItemEntry dHondtQuotientPolitischeGruppeSearchMenuItemEntry;

  @Inject
  protected transient GruppeKumulierteStimmenAnzeigenMenuItemEntry gruppeKumulierteStimmenAnzeigenMenuItemEntry;

  @Inject
  protected transient GruppeNachErfassungsgebietStimmenAnzeigenTabellarischMenuItemEntry gruppeNachErfassungsgebietStimmenAnzeigenTabellarischMenuItemEntry;

  @Inject
  protected transient GruppeNachErfassungsgebietStimmenAnzeigenGrafischMenuItemEntry gruppeNachErfassungsgebietStimmenAnzeigenGrafischMenuItemEntry;

  @Inject
  protected transient GewinnerUnterlegenerStimmendifferenzAnzeigenMenuItemEntry gewinnerUnterlegenerStimmendifferenzAnzeigenMenuItemEntry;

  @Inject
  protected transient ListenkandidaturKumulierteStimmenAnzeigenMenuItemEntry listenkandidaturKumulierteStimmenAnzeigenMenuItemEntry;

  @Inject
  protected transient ListenkandidaturNachErfassungsgebietStimmenAnzeigenMenuItemEntry listenkandidaturNachErfassungsgebietStimmenAnzeigenMenuItemEntry;

  @Inject
  protected transient DirektkandidaturKumulierteStimmenAnzeigenMenuItemEntry direktkandidaturKumulierteStimmenAnzeigenMenuItemEntry;

  @Inject
  protected transient ReferendumOptionKumulierteStimmenAnzeigenMenuItemEntry referendumOptionKumulierteStimmenAnzeigenMenuItemEntry;

  @Inject
  protected transient SitzeAnzeigenMenuItemEntry sitzeAnzeigenMenuItemEntry;

  //  @Inject private VorperiodeDatumFestlegenMenuItemEntry vorperiodeDatumFestlegenMenuItemEntry;

  @Inject
  protected transient ErgebnisKonfliktSearchMenuItemEntry ergebnisKonfliktSearchMenuItemEntry;

  // @Inject private ErgebnisSitzverteilungMenuItemEntry ergebnisSitzverteilungMenuItemEntry;

  // ELECT-3344 @Inject private KandidaturGewaehltExportMenuItemEntry kandidaturGewaehltExportMenuItemEntry;

  @Inject
  protected transient KandidaturGewaehltSearchMenuItemEntry kandidaturGewaehltSearchMenuItemEntry;

  @Inject
  protected transient ErgebnisExportMenuItemEntry ergebnisExportMenuItemEntry;

  @Inject
  protected transient GesamtErgebnisDokumentErzeugenMenuItemEntry gesamtErgebnisDokumentErzeugenMenuItemEntry;

  @Inject
  protected transient WahlbuchDokumentErzeugenMenuItemEntry wahlbuchDokumentErzeugenMenuItemEntry;

  @Inject
  protected transient StimmenImportMenuItemEntry stimmenImportMenuItemEntry;

  @Inject
  protected transient GewaehlteImportMenuItemEntry gewaehlteImportMenuItemEntry;

  @Inject
  protected transient SitzeImportMenuItemEntry sitzeImportMenuItemEntry;

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

    result.add(ergebnisStatusMenuItemEntry);

    result.add(separator);
    result.add(ergebnisLogEintragAnzeigenMenuItemEntry);
    result.add(besonderheitAnzeigenMenuItemEntry);
    result.add(dHondtQuotientPolitischeGruppeSearchMenuItemEntry);
    result.add(dHondtQuotientListenImGebietSearchMenuItemEntry);
    result.add(dHondtQuotientListenInGruppeSearchMenuItemEntry);

    result.add(separator);
    result.add(gruppeKumulierteStimmenAnzeigenMenuItemEntry);

    result.add(listenkandidaturKumulierteStimmenAnzeigenMenuItemEntry);
    result.add(direktkandidaturKumulierteStimmenAnzeigenMenuItemEntry);
    result.add(referendumOptionKumulierteStimmenAnzeigenMenuItemEntry);

    result.add(gruppeNachErfassungsgebietStimmenAnzeigenTabellarischMenuItemEntry);
    result.add(gruppeNachErfassungsgebietStimmenAnzeigenGrafischMenuItemEntry);
    result.add(listenkandidaturNachErfassungsgebietStimmenAnzeigenMenuItemEntry);

    result.add(gewinnerUnterlegenerStimmendifferenzAnzeigenMenuItemEntry);

    // ELECTMUC-934 nur für Flexpräsentation relevant gewesen
    // subMenuEntriesSorted.add(separator);
    // subMenuEntriesSorted.add(vorperiodeDatumFestlegenMenuItemEntry);

    result.add(separator);
    result.add(ergebnisKonfliktSearchMenuItemEntry);

    // subMenuEntriesSorted.add(separator); subMenuEntriesSorted.add(ergebnisSitzverteilungMenuItemEntry);

    result.add(sitzeAnzeigenMenuItemEntry);
    result.add(kandidaturGewaehltSearchMenuItemEntry);

    result.add(separator);
    //     subMenuEntriesSorted.add(kandidaturGewaehltExportMenuItemEntry);
    result.add(ergebnisExportMenuItemEntry);

    addErgebnisDocumentExportMenuItemEntries(result);

    result.add(separator);
    result.add(stimmenImportMenuItemEntry);
    result.add(gewaehlteImportMenuItemEntry);
    result.add(sitzeImportMenuItemEntry);

    return result;
  }

  protected void addErgebnisDocumentExportMenuItemEntries(List<MenuEntry> result) {
    result.add(separator);
    result.add(gesamtErgebnisDokumentErzeugenMenuItemEntry);
    result.add(wahlbuchDokumentErzeugenMenuItemEntry);
  }
}
