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

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.WusFeaturesAktiviert;
import de.ivu.elect.jee.presentation.menu.AbstractMenuModelBuilder;
import de.ivu.elect.jee.presentation.menu.MenuEntry;
import de.ivu.elect.presentation.gruppeimgebiet.menu.GruppeImGebietSearchMenu;

public abstract class AbstractWahlvorschlagSearchMenu extends AbstractMenuModelBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WusFeaturesAktiviert wusFeaturesAktiviert;

  @Inject
  private transient GruppeImGebietSearchMenu gruppeImGebietSearchMenu;

  @Inject
  private transient WahlvorschlaegeNachGebietDokumentErzeugenMenuItemEntry wahlvorschlaegeNachGebietDokumentErzeugenMenuItemEntry;

  @Inject
  private transient WahlvorschlagFuerAlleZulassungsvorschlagSetzenMenuItemEntry wahlvorschlagFuerAlleZulassungsvorschlagSetzenMenuItemEntry;

  @Inject
  private transient WahlvorschlagSearchGoToUebergeordnetesListenwahlgebietMenuItemEntry wahlvorschlagSearchGoToUebergeordnetesListenwahlgebietMenuItemEntry;

  @Inject
  private transient WahlvorschlagSearchGoToUebergeordnetesDirektwahlgebietMenuItemEntry wahlvorschlagSearchGoToUebergeordnetesDirektwahlgebietMenuItemEntry;

  @Inject
  private transient WahlvorschlagSearchGoToUebergeordnetesReferendumgebietMenuItemEntry wahlvorschlagSearchGoToUebergeordnetesReferendumgebietMenuItemEntry;

  protected AbstractWahlvorschlagSearchMenu() {
    super();
  }

  @Override
  protected List<MenuEntry> getMenuEntriesSorted() {
    List<MenuEntry> result = new ArrayList<>();

    addMenuEntriesCreate(result);

    addMenuEntriesGruppeImGebiet(result);

    addMenuEntriesNavigation(result);

    addMenuEntriesDokumentErzeugen(result);
    result.add(wahlvorschlaegeNachGebietDokumentErzeugenMenuItemEntry);

    result.add(wahlvorschlagFuerAlleZulassungsvorschlagSetzenMenuItemEntry);
    addMenuEntriesZulassenZuTestzwecken(result);

    return result;
  }

  // ELECT-9386
  protected void addMenuEntriesNavigation(List<MenuEntry> result) {
    result.add(wahlvorschlagSearchGoToUebergeordnetesListenwahlgebietMenuItemEntry);
    result.add(wahlvorschlagSearchGoToUebergeordnetesDirektwahlgebietMenuItemEntry);
    result.add(wahlvorschlagSearchGoToUebergeordnetesReferendumgebietMenuItemEntry);
  }

  protected void addMenuEntriesGruppeImGebiet(List<MenuEntry> result) {
    if (wusFeaturesAktiviert.isWusWasZusammen() && gruppeImGebietSearchMenu.isRendered()) {
      result.addAll(gruppeImGebietSearchMenu.listMenuEntries());
    }
  }

  protected abstract void addMenuEntriesCreate(List<MenuEntry> result);

  protected abstract void addMenuEntriesDokumentErzeugen(List<MenuEntry> result);

  protected abstract void addMenuEntriesZulassenZuTestzwecken(List<MenuEntry> result);
}
