package de.ivu.elect.presentation.stimmzettel;

import java.io.Serializable;

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

import de.ivu.elect.business.gebietsbaum.boundary.GebietSelectChangeEvent;
import de.ivu.elect.business.gebietsbaum.boundary.GebietSessionSelect;
import de.ivu.elect.business.stimmzettel.boundary.StimmzettelErfassungSupport;
import de.ivu.elect.business.wahl.boundary.WahlSelectChangeEvent;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelect;

@RequestScoped
public class StimmzettelErfassungVerfuegbar implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlSessionSelect wahlSessionSelect;

  @Inject
  private transient GebietSessionSelect gebietSessionSelect;

  @Inject
  private transient StimmzettelErfassungSupport stimmzettelErfassungSupport;

  private Boolean stimmzettelVerfuegbar;

  public boolean isStimmzettelErfassungVerfuegbar() {
    if (stimmzettelVerfuegbar == null) {
      stimmzettelVerfuegbar = stimmzettelErfassungSupport.isStimmzettelErfassungVerfuegbar(wahlSessionSelect.getEntity()) && gebietSessionSelect.isSelected();
    }
    return stimmzettelVerfuegbar;
  }

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

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

  private void reset() {
    stimmzettelVerfuegbar = null;
  }

}
