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

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

import de.ivu.elect.business.wahlrechtspruefung.entity.WahlrechtspruefStatus;
import de.ivu.elect.business.wahlrechtspruefung.entity.Wahlrechtspruefung;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.wahlrechtspruefung.WahlrechtspruefungSearchView;

@Named(WahlrechtspruefungSetzePruefungFristSetzenAction.COMPONENT_NAME)
public class WahlrechtspruefungSetzePruefungFristSetzenAction extends AbstractWahlrechtspruefungSetzePruefungAction {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "wahlrechtspruefungSetzePruefungFristSetzenAction";

  @View
  @Inject
  private transient WahlrechtspruefungSearchView wahlrechtspruefungSearchView;

  public WahlrechtspruefungSetzePruefungFristSetzenAction() {
    super();
  }

  @Override
  protected WahlrechtspruefStatus getWahlrechtspruefStatus() {
    return WahlrechtspruefStatus.FRIST_GESETZT;
  }

  @Override
  public boolean isDisabledInternal(@Nonnull Wahlrechtspruefung wahlrechtspruefung) {
    // ELECT-3729 Prüfkriterien für Wahlvorschläge: Frist setzen nur für heilbare Mängel
    return super.isDisabledInternal(wahlrechtspruefung) || !wahlrechtspruefung.getPruefkriterium().getHeilungsfaehig();
  }

  @Override
  protected String doItInternal(Wahlrechtspruefung wahlrechtspruefung) {
    wahlrechtspruefung.setFristInTagenBisZurWahl(wahlrechtspruefung.getPruefkriterium().getFristInTagenBisZurWahl());

    return super.doItInternal(wahlrechtspruefung);
  }

  @Nullable
  @Deprecated // Frist in Tagen manipulieren?
  public String setzeFrist() {
    Wahlrechtspruefung wahlrechtspruefung = wahlrechtspruefungSearchView.getSelectedEntity();

    super.doIt(wahlrechtspruefung);

    ajaxHelper.closePageDialog("EditFrist");

    return null;
  }

  @Override
  protected String getSimpleClassName() {
    return WahlrechtspruefungSetzePruefungFristSetzenAction.class.getSimpleName();
  }
}
