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

import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import org.primefaces.event.SelectEvent;

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.faces.FacesContextUtil;

@Specializes
public class WasKandidaturEditAction extends KandidaturEditAction {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WaehlerBenannteDirektkandidaturEditAction waehlerBenannteDirektkandidaturEditAction;

  @Inject
  private transient WaehlerBenannteListenkandidaturEditAction waehlerBenannteListenkandidaturEditAction;

  public WasKandidaturEditAction() {
    super();
  }

  @Override
  public boolean isDisabledInternal(@Nonnull Kandidatur kandidatur) {
    return true;
  }

  @Override
  public boolean hasPrincipalRequiredPermission() {
    return principal.hasUseCasePermission(UseCasePermission.WAEHLER_BENANNTE_KANDIDATUR_EDIT);
  }

  @Override
  @Nullable
  public String doIt(Kandidatur kandidatur) {
    if (!waehlerBenannteDirektkandidaturEditAction.isDisabled(kandidatur)) {
      return waehlerBenannteDirektkandidaturEditAction.doIt(kandidatur);
    } else if (!waehlerBenannteListenkandidaturEditAction.isDisabled(kandidatur)) {
      return waehlerBenannteListenkandidaturEditAction.doIt(kandidatur);
    }

    return FacesContextUtil.getCurrentViewId();
  }

  @Override
  public void onRowDblselect(SelectEvent event) {
    if (event != null && event.getObject() instanceof Kandidatur) {
      Kandidatur kandidatur = (Kandidatur) event.getObject();

      if (!waehlerBenannteDirektkandidaturEditAction.isDisabled(kandidatur)) {
        waehlerBenannteDirektkandidaturEditAction.onRowDblselect(event);
      } else if (!waehlerBenannteListenkandidaturEditAction.isDisabled(kandidatur)) {
        waehlerBenannteListenkandidaturEditAction.onRowDblselect(event);
      }
    }
  }
}
