
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.entity.Kandidatur;
import de.ivu.elect.business.kandidatur.entity.WaehlerBenannteKandidaturen;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.presentation.kandidatur.WaehlerBenannteDirektkandidaturEditView;
import de.ivu.elect.presentation.kandidatur.WaehlerBenannteListenkandidaturEditView;
import de.ivu.elect.presentation.kandidatur.action.WaehlerBenannteDirektkandidaturDeleteAction;
import de.ivu.elect.presentation.kandidatur.action.WaehlerBenannteListenkandidaturDeleteAction;
import de.ivu.elect.presentation.menu.AbstractActionEntry;

public class WasPersonendatenDeleteActionResolver extends AbstractPersonendatenDeleteActionResolver {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient CorePersonendatenDeleteActionResolver corePersonendatenDeleteActionResolver;

  @Inject
  protected transient WaehlerBenannteListenkandidaturDeleteAction waehlerBenannteListenkandidaturDeleteAction;

  @Inject
  protected transient WaehlerBenannteDirektkandidaturDeleteAction waehlerBenannteDirektkandidaturDeleteAction;

  public WasPersonendatenDeleteActionResolver() {
    super();
  }

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

      if (WaehlerBenannteKandidaturen.isWaehlerBenannteListenkandidatur(kandidatur)) {
        return waehlerBenannteListenkandidaturDeleteAction;
      }

      if (WaehlerBenannteKandidaturen.isWaehlerBenannteDirektkandidatur(kandidatur)) {
        return waehlerBenannteDirektkandidaturDeleteAction;
      }
    }

    return corePersonendatenDeleteActionResolver.resolveAction(personendaten);
  }

  @Override
  protected <E extends Personendaten> String resolveEditViewComponentName(Personendaten personendaten) {
    if (personendaten.isInstanceOf(Kandidatur.class)) {
      Kandidatur kandidatur = castTo(personendaten, Kandidatur.class);

      if (WaehlerBenannteKandidaturen.isWaehlerBenannteListenkandidatur(kandidatur)) {
        return WaehlerBenannteListenkandidaturEditView.COMPONENT_NAME;
      }

      if (WaehlerBenannteKandidaturen.isWaehlerBenannteDirektkandidatur(kandidatur)) {
        return WaehlerBenannteDirektkandidaturEditView.COMPONENT_NAME;
      }
    }

    return corePersonendatenDeleteActionResolver.resolveEditViewComponentName(personendaten);
  }
}
