
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(DirektkandidaturActionMenu.COMPONENT_NAME)
public class DirektkandidaturActionMenu extends AbstractActionMenuModelBuilder<Kandidatur> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "direktkandidaturActionMenu";

  @Inject
  private transient DirektkandidaturWahlvorschlagsPersonSearchAction direktkandidaturWahlvorschlagsPersonSearchAction;

  @Inject
  private transient DirektkandidaturWahlvorschlagEmpfangsquittungDokumentErzeugenAction direktkandidaturWahlvorschlagEmpfangsquittungDokumentErzeugenAction;

  @Inject
  private transient DirektkandidaturEditAction direktkandidaturEditAction;

  @Inject
  private transient DirektkandidaturDeleteAction direktkandidaturDeleteAction;

  @Inject
  private transient DirektkandidaturZulassungBestaetigenAction direktkandidaturZulassungBestaetigenAction;

  @Inject
  private transient EinzelkandidaturEditAction einzelkandidaturEditAction;

  @Inject
  private transient EinzelkandidaturDeleteAction einzelkandidaturDeleteAction;

  @Inject
  private transient EinzelkandidaturZulassungBestaetigenAction einzelkandidaturZulassungBestaetigenAction;

  @Inject
  private transient ErsatzkandidaturEditAction ersatzkandidaturEditAction;

  @Inject
  private transient ErsatzkandidaturDeleteAction ersatzkandidaturDeleteAction;

  @Inject
  private transient ErsatzkandidaturZulassungBestaetigenAction ersatzkandidaturZulassungBestaetigenAction;

  @Inject
  private transient ErsatzkandidaturZulassungAblehnenAction ersatzkandidaturZulassungAblehnenAction;

  @Inject
  private transient ErsatzkandidaturZulassungZuruecksetzenAction ersatzkandidaturZulassungZuruecksetzenAction;

  @Inject
  private transient EinzelkandidaturZulassungAblehnenAction einzelkandidaturZulassungAblehnenAction;

  @Inject
  private transient EinzelkandidaturZulassungZuruecksetzenAction einzelkandidaturZulassungZuruecksetzenAction;

  @Inject
  private transient DirektkandidaturZulassungAblehnenAction direktkandidaturZulassungAblehnenAction;

  @Inject
  private transient DirektkandidaturZulassungZuruecksetzenAction direktkandidaturZulassungZuruecksetzenAction;

  @Inject
  private transient DirektkandidaturWahlvorschlagDokumentErzeugenAction direktkandidaturWahlvorschlagDokumentErzeugenAction;

  @Inject
  private transient DirektkandidaturGruppeWechselnAction direktkandidaturGruppeWechselnAction;

  public DirektkandidaturActionMenu() {
    super();
  }

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

    addKandidaturPersonenKonfliktAufloesenAction(result);

    addKandidaturEditAction(result);

    addKandidaturPersonenKonfliktActions(result);

    addKandidaturErsatzkandidaturActions(result);

    addKandidaturZulassungActions(result);

    addKandidaturStatusActions(result);

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

    addKandidaturDokumentErzeugenActions(result);

    result.add(direktkandidaturGruppeWechselnAction);

    addKandidaturDeleteAction(result);


    return result;
  }

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

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

  protected void addKandidaturPersonenKonfliktAufloesenAction(List<ActionEntry<Kandidatur>> result) {
    // nichts zu tun
  }

  protected void addKandidaturPersonenKonfliktActions(List<ActionEntry<Kandidatur>> result) {
    // nichts zu tun
  }

  protected void addKandidaturZulassungActions(List<ActionEntry<Kandidatur>> result) {
    result.add(direktkandidaturZulassungBestaetigenAction);
    result.add(einzelkandidaturZulassungBestaetigenAction);
    result.add(ersatzkandidaturZulassungBestaetigenAction);

    result.add(direktkandidaturZulassungAblehnenAction);
    result.add(einzelkandidaturZulassungAblehnenAction);
    result.add(ersatzkandidaturZulassungAblehnenAction);
  }

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

  protected void addKandidaturErsatzkandidaturActions(List<ActionEntry<Kandidatur>> result) {
    // nichts zu tun
  }

  protected void addKandidaturDokumentErzeugenActions(List<ActionEntry<Kandidatur>> result) {
    result.add(direktkandidaturWahlvorschlagDokumentErzeugenAction);
    result.add(direktkandidaturWahlvorschlagEmpfangsquittungDokumentErzeugenAction);
  }
}
