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

import java.util.List;

import javax.annotation.Nonnull;
import javax.inject.Inject;

import org.apache.deltaspike.core.api.scope.ConversationGroup;

import de.ivu.elect.business.niederschrift.boundary.NiederschriftStatusAenderungListConversationStore;
import de.ivu.elect.business.niederschrift.entity.NiederschriftStatusAenderung;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.presentation.menu.AbstractActionEntry;
import de.ivu.elect.presentation.niederschrift.menu.NiederschriftStatusAenderungCreateMenuItemEntry;
import de.ivu.elect.presentation.security.AbstractGebietSecurity;

public class NiederschriftStatusAenderungRemoveAction extends AbstractActionEntry<NiederschriftStatusAenderung> {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient NiederschriftStatusAenderungCreateMenuItemEntry niederschriftStatusAenderungCreateMenuItemEntry;

  @Inject
  @ConversationGroup(NiederschriftStatusAenderungListConversationStore.class)
  private transient NiederschriftStatusAenderungListConversationStore niederschriftStatusAenderungenErfasst;

  public NiederschriftStatusAenderungRemoveAction() {
    super();
  }

  @Override
  protected UseCasePermission getRequiredPermission() {
    return niederschriftStatusAenderungCreateMenuItemEntry.getUseCasePermission();
  }

  @Override
  protected AbstractGebietSecurity getGebietSecurity() {
    return niederschriftStatusAenderungCreateMenuItemEntry.getGebietSecurity();
  }

  @Override
  public boolean isDisabledInternal(@Nonnull NiederschriftStatusAenderung niederschriftStatusAenderung) {
    List<NiederschriftStatusAenderung> niederschriftStatusAenderungen = niederschriftStatusAenderungenErfasst.get();

    return niederschriftStatusAenderungen.isEmpty() || !niederschriftStatusAenderungen.contains(niederschriftStatusAenderung);
  }

  @Override
  protected String doIt(NiederschriftStatusAenderung niederschriftStatusAenderung) {
    niederschriftStatusAenderungenErfasst.remove(niederschriftStatusAenderung);

    return getTargetViewId();
  }

  private String getTargetViewId() {
    return niederschriftStatusAenderungCreateMenuItemEntry.getTargetViewId();
  }

  @Override
  protected boolean isFireChangeEvent() {
    return false;
  }

  @Override
  protected void fireChangeEvent() {
    // Do nothing...
  }

  @Override
  public String getLabelKey() {
    return "niederschrift.status.aenderung.remove.from.queue.action";
  }

  @Override
  public String getIcon() {
    return appIcons.getIconRemove();
  }
}
