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

import static de.ivu.elect.jee.entity.EntityUtil.castTo;

import javax.inject.Inject;

import de.ivu.elect.business.kandidatur.boundary.WaehlerBenannteKandidaturKonfiguration;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.presentation.kandidatur.action.WaehlerBenannteDirektkandidaturEditAction;
import de.ivu.elect.presentation.kandidatur.action.WaehlerBenannteListenkandidaturEditAction;
import de.ivu.elect.presentation.menu.AbstractActionEntry;

public class WasPersonendatenEditActionResolver extends AbstractPersonendatenEditActionResolver {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient WaehlerBenannteKandidaturKonfiguration waehlerBenannteKandidaturKonfiguration;

  @Inject
  protected transient CorePersonendatenEditActionResolver corePersonendatenEditActionResolver;

  @Inject
  protected transient WaehlerBenannteListenkandidaturEditAction waehlerBenannteListenkandidaturEditAction;

  @Inject
  protected transient WaehlerBenannteDirektkandidaturEditAction waehlerBenannteDirektkandidaturEditAction;

  public WasPersonendatenEditActionResolver() {
    super();
  }

  @Override
  @SuppressWarnings("unchecked")
  protected AbstractActionEntry< ? extends Personendaten> resolveAction(Personendaten personendaten) {
    if (personendaten.isInstanceOf(Kandidatur.class)) {
      Kandidatur kandidatur = castTo(personendaten, Kandidatur.class);

      if (waehlerBenannteKandidaturKonfiguration.isWaehlerBenannteListenkandidatur(kandidatur)) {
        return waehlerBenannteListenkandidaturEditAction;
      }

      if (waehlerBenannteKandidaturKonfiguration.isWaehlerBenannteDirektkandidatur(kandidatur)) {
        return waehlerBenannteDirektkandidaturEditAction;
      }
    }

    return corePersonendatenEditActionResolver.resolveAction(personendaten);
  }
}
