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

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

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

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.jee.presentation.action.AbstractActionMenuModelBuilder;
import de.ivu.elect.jee.presentation.action.ActionEntry;

@Named(ListenkandidaturActionMenu.COMPONENT_NAME)
public class ListenkandidaturActionMenu extends AbstractActionMenuModelBuilder<Kandidatur> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "listenkandidaturActionMenu";

  @Inject
  protected transient ListenkandidaturEditAction listenkandidaturEditAction;

  @Inject
  protected transient ListenkandidaturDeleteAction listenkandidaturDeleteAction;

  @Inject
  protected transient EinzelbewerberListenkandidaturEditAction einzelbewerberListenkandidaturEditAction;

  @Inject
  protected transient EinzelbewerberListenkandidaturDeleteAction einzelbewerberListenkandidaturDeleteAction;

  @Inject
  protected transient ListenkandidaturErsatzkandidaturCreateAction listenkandidaturErsatzkandidaturCreateAction;

  @Inject
  protected transient ListenkandidaturCreateAtListenpositionAction listenkandidaturCreateAtListenpositionAction;

  @Inject
  protected transient ListenkandidaturListenkandidaturArtAufErsatzkandidaturSetzenAction listenkandidaturArtAufErsatzkandidaturSetzenAction;

  @Inject
  protected transient ListenkandidaturListenkandidaturArtAufListenkandidaturSetzenAction listenkandidaturArtAufListenkandidaturSetzenAction;

  @Inject
  protected transient ListenkandidaturZulassungBestaetigenAction listenkandidaturZulassungBestaetigenAction;

  @Inject
  protected transient ListenkandidaturZulassungAblehnenAction listenkandidaturZulassungAblehnenAction;

  @Inject
  protected transient ListenkandidaturZulassungZuruecksetzenAction listenkandidaturZulassungZuruecksetzenAction;

  @Inject
  protected transient ErsatzkandidaturEditAction ersatzkandidaturEditAction;

  @Inject
  protected transient ErsatzkandidaturDeleteAction ersatzkandidaturDeleteAction;

  @Inject
  protected transient ErsatzkandidaturErsatzkandidaturCreateAction ersatzkandidaturErsatzkandidaturCreateAction;

  @Inject
  protected transient ErsatzkandidaturAufrueckenAction ersatzkandidaturAufrueckenAction;

  @Inject
  protected transient ErsatzkandidaturZulassungBestaetigenAction ersatzkandidaturZulassungBestaetigenAction;

  @Inject
  protected transient ErsatzkandidaturZulassungAblehnenAction ersatzkandidaturZulassungAblehnenAction;

  @Inject
  protected transient ErsatzkandidaturZulassungZuruecksetzenAction ersatzkandidaturZulassungZuruecksetzenAction;

  @Inject
  protected transient PersonenpruefungListenkandidaturActionMenu personenpruefungListenkandidaturActionMenu;

  @Inject
  protected transient KandidaturWahlvorschlagsPersonSearchAction kandidaturWahlvorschlagsPersonSearchAction;

  public ListenkandidaturActionMenu() {
    super();
  }

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

    addKandidaturPersonenKonfliktAufloesenAction(result);

    addKandidaturEditAction(result);

    addKandidaturPersonenKonfliktActions(result);

    addKandidaturErsatzkandidaturActions(result);

    result.add(listenkandidaturCreateAtListenpositionAction);
    result.add(listenkandidaturArtAufErsatzkandidaturSetzenAction);
    result.add(listenkandidaturArtAufListenkandidaturSetzenAction);

    addKandidaturZulassungActions(result);

    addKandidaturStatusActions(result);

    result.add(kandidaturWahlvorschlagsPersonSearchAction); // ELECT-15852

    addKandidaturDeleteAction(result);

    return result;
  }

  protected void addKandidaturEditAction(List<ActionEntry<Kandidatur>> result) {
    result.add(listenkandidaturEditAction);
    result.add(einzelbewerberListenkandidaturEditAction);
    result.add(ersatzkandidaturEditAction);
  }

  protected void addKandidaturDeleteAction(List<ActionEntry<Kandidatur>> result) {
    result.add(listenkandidaturDeleteAction);
    result.add(einzelbewerberListenkandidaturDeleteAction);
    result.add(ersatzkandidaturDeleteAction);
  }

  protected void addKandidaturPersonenKonfliktAufloesenAction(List<ActionEntry<Kandidatur>> result) {
    personenpruefungListenkandidaturActionMenu.addKandidaturPersonenKonfliktAufloesenAction(result);
  }

  protected void addKandidaturPersonenKonfliktActions(List<ActionEntry<Kandidatur>> result) {
    personenpruefungListenkandidaturActionMenu.addKandidaturPersonenKonfliktActions(result);
  }

  protected void addKandidaturZulassungActions(List<ActionEntry<Kandidatur>> result) {
    personenpruefungListenkandidaturActionMenu.addKandidaturZulassungActions(result);

    result.add(listenkandidaturZulassungBestaetigenAction);
    result.add(ersatzkandidaturZulassungBestaetigenAction);

    result.add(listenkandidaturZulassungAblehnenAction);
    result.add(ersatzkandidaturZulassungAblehnenAction);
  }

  protected void addKandidaturStatusActions(List<ActionEntry<Kandidatur>> result) {
    result.add(listenkandidaturZulassungZuruecksetzenAction);
    result.add(ersatzkandidaturZulassungZuruecksetzenAction);
  }

  protected void addKandidaturErsatzkandidaturActions(List<ActionEntry<Kandidatur>> result) {
    result.add(ersatzkandidaturAufrueckenAction);

    result.add(listenkandidaturErsatzkandidaturCreateAction);
    result.add(ersatzkandidaturErsatzkandidaturCreateAction);
  }
}
