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

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

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.wahlvorschlag.entity.Liste;
import de.ivu.elect.jee.presentation.action.AbstractActionMenuModelBuilder;
import de.ivu.elect.jee.presentation.action.ActionEntry;

@Named(ListeActionMenu.COMPONENT_NAME)
public class ListeActionMenu extends AbstractActionMenuModelBuilder<Liste> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "listeActionMenu";

  @Inject
  protected transient ListeListenkandidaturSearchAction listeListenkandidaturSearchAction;

  @Inject
  protected transient ListeEditAction listeEditAction;

  @Inject
  protected transient ListeDeleteAction listeDeleteAction;

  @Inject // ELECT-12034
  protected transient EinzelbewerberListeListenkandidaturSearchAction einzelbewerberListeListenkandidaturSearchAction;

  @Inject // ELECT-12006
  protected transient EinzelbewerberListeEditAction einzelbewerberListeEditAction;

  @Inject // ELECT-12006
  protected transient EinzelbewerberListeDeleteAction einzelbewerberListeDeleteAction;

  @Inject
  protected transient ListeListenverbindungEditAction listeListenverbindungEditAction;

  @Inject
  protected transient ListeWahlvorschlagsPersonSearchAction listeWahlvorschlagsPersonSearchAction;

  @Inject
  protected transient ListeWahlvorschlagDokumentErzeugenAction listeWahlvorschlagDokumentErzeugenAction;

  @Inject
  protected transient ListeWahlvorschlagEmpfangsquittungDokumentErzeugenAction listeWahlvorschlagEmpfangsquittungDokumentErzeugenAction;

  @Inject
  protected transient ListeZulassungBestaetigenAction listeZulassungBestaetigenAction;

  @Inject
  protected transient ListeZulassungAblehnenAction listeZulassungAblehnenAction;

  @Inject
  protected transient ListeZulassungZuruecksetzenAction listeZulassungZuruecksetzenAction;

  @Inject
  protected transient ListeGruppeWechselnAction listeGruppeWechselnAction;

  @Inject
  private transient WvpListeActionMenu wvpListeActionMenu;

  public ListeActionMenu() {
    super();
  }

  @Override
  // Cf. KandidaturActionMenu#getActionEntriesSorted, DirektkandidaturActionMenu#getActionEntriesSorted, ListenkandidaturActionMenu#getActionEntriesSorted!
  protected List<ActionEntry<Liste>> getActionEntriesSorted() {
    List<ActionEntry<Liste>> result = new ArrayList<>();

    result.add(listeListenkandidaturSearchAction);
    result.add(listeEditAction);

    result.add(einzelbewerberListeEditAction); // "Bearbeiten" vor "Anzeige" -> Default-Action...
    result.add(einzelbewerberListeListenkandidaturSearchAction);

    result.add(listeListenverbindungEditAction);

    addListeZulassungActions(result);

    addListeStatusActions(result);

    result.add(listeWahlvorschlagsPersonSearchAction); // ELECT-8235

    result.addAll(wvpListeActionMenu.getActionEntriesSorted());
    addListeDokumentErzeugenActions(result);

    result.add(listeGruppeWechselnAction);

    result.add(listeDeleteAction);
    result.add(einzelbewerberListeDeleteAction);

    return result;
  }

  protected void addListeZulassungActions(List<ActionEntry<Liste>> result) {
    result.add(listeZulassungBestaetigenAction);
    result.add(listeZulassungAblehnenAction);
  }

  protected void addListeStatusActions(List<ActionEntry<Liste>> result) {
    result.add(listeZulassungZuruecksetzenAction);
  }

  protected void addListeDokumentErzeugenActions(List<ActionEntry<Liste>> result) {
    result.add(listeWahlvorschlagDokumentErzeugenAction);
    result.add(listeWahlvorschlagEmpfangsquittungDokumentErzeugenAction);
  }
}
