
package de.ivu.elect.presentation.ergebnis;

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

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

import de.ivu.elect.business.ergebnis.boundary.ParteienwechselSearch;
import de.ivu.elect.business.ergebnis.boundary.ParteienwechselSearchParameters;
import de.ivu.elect.business.ergebnis.entity.ParteienwechselSearchResult;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.faces.PreConditionCheck;
import de.ivu.elect.jee.presentation.dynamicform.FormBuilder;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.ergebnis.table.ParteienwechselColumnBuilder;
import de.ivu.elect.presentation.hilfe.OnlineHilfeId;

/**
 * WASDE-589 - WAS: Ergebnisse -> Auswertung ergänzen: Parteienwechsel in Wahlkreisen
 */
@OnlineHilfeId("499")
@ViewAccessScoped
@Named(ParteienwechselSearchView.COMPONENT_NAME)
@View(viewId = ParteienwechselSearchView.VIEW_ID, useCase = UseCasePermission.ERGEBNIS_KUMULIERTE_STIMMEN_ANZEIGEN)
public class ParteienwechselSearchView extends AbstractKumulierteStimmenSearchView<ParteienwechselSearchParameters, ParteienwechselSearchResult> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "parteienwechselSearchView";

  public static final String VIEW_ID = "/ergebnis/parteienwechsel-search.xhtml";

  @Inject
  private transient ParteienwechselSearch parteienwechselSearch;

  @Inject
  @ConversationGroup(ParteienwechselSearchParameters.class)
  private transient ParteienwechselSearchParameters parteienwechselSearchParameters;

  @Inject
  private transient ParteienwechselColumnBuilder parteienwechselColumnBuilder;

  public ParteienwechselSearchView() {
    super();
  }

  @Override
  protected String getViewId() {
    return VIEW_ID;
  }

  @Nullable
  @PreConditionCheck
  public String checkCondition() {
    if (!isGebietSelected() || !isErgebnisSelected()) {
      return getStartViewId();
    }

    return null;
  }

  @Override
  public int getDefaultPageSize() {
    return getPageSizeConfigured(); // wieder default
  }

  @Override
  public void addProperties(FormBuilder formBuilder) {
    // nichts zu tun...
  }

  @Override
  public ParteienwechselSearchParameters getSearchParameters() {
    parteienwechselSearchParameters.setGebietSelected(getSelectedGebiet());
    parteienwechselSearchParameters.setErgebnisSelected(getErgebnis());

    return parteienwechselSearchParameters;
  }

  @Override
  protected ParteienwechselSearchParameters getSearchParametersInternal() {
    return parteienwechselSearchParameters;
  }

  @Override
  protected ParteienwechselSearch getSearch() {
    return parteienwechselSearch;
  }

  @Override
  protected ParteienwechselColumnBuilder getColumnBuilder() {
    return parteienwechselColumnBuilder;
  }
}
