
package de.ivu.elect.business.wahl.boundary;

import javax.enterprise.event.Observes;
import javax.enterprise.event.Reception;
import javax.inject.Inject;

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

import de.ivu.elect.business.gebietsbaum.boundary.GebietSelectChangeEvent;
import de.ivu.elect.business.wahl.boundary.WahlSelectChangeEvent;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelector;
import de.ivu.elect.business.wahl.boundary.WahlterminSelectChangeEvent;
import de.ivu.elect.business.wahl.boundary.WahlterminSessionSelect;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.business.search.control.AbstractElectSearchParameters;

@GroupedConversationScoped
@ConversationGroup(AbstractWahlartSearchParameters.class)
public abstract class AbstractWahlartSearchParameters extends AbstractElectSearchParameters {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlSessionSelector wahlSelect;

  @Inject
  private transient WahlterminSessionSelect wahlterminSelect;

  public AbstractWahlartSearchParameters() {
    super();
  }

  protected boolean isWahlSelected() {
    return wahlSelect.isSelected();
  }

  protected Wahl getSelectedWahl() {
    return wahlSelect.getEntity();
  }

  protected boolean isWahlterminSelected() {
    return wahlterminSelect.isSelected();
  }

  protected Wahltermin getSelectedWahltermin() {
    return wahlterminSelect.getEntity();
  }

  // NOTE ELECT-2231, ELECT-2250, dass Suchparameter von der zur Bearbeitung ausgewählten Wahl bzw. dem ausgewählten
  // Wahltermin abhängig sind.
  public void onWahlSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) WahlSelectChangeEvent event) {
    reset();
  }

  public void onWahlterminSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) WahlterminSelectChangeEvent event) {
    reset();
  }

  // NOTE ELECTMUC-882, dass Suchparameter ggf. (!) vom ausgewählten Gebiet abhängig sind. Wird dieses gewechselt müssen
  // NICHT alle Werte des Suchparameter, zumindest aber die Pagination, zurückgesetzt werden!
  public void onGebietSelectChangeEvent(@Observes(notifyObserver = Reception.IF_EXISTS) GebietSelectChangeEvent event) {
    resetFirst();
  }
}
