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

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

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.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.wahlausschuss.control.WahlausschussmitgliedVerterterFilterKriteriumProperty;
import de.ivu.elect.business.wahlausschuss.entity.Wahlausschussmitglied;
import de.ivu.elect.business.wahlausschuss.entity.WahlausschussmitgliedProperties;
import de.ivu.elect.business.wahlausschuss.entity.WahlausschussmitgliedVerterterFilterKriterium;
import de.ivu.elect.business.wahlausschuss.entity.Wahlausschussrolle;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;
import de.ivu.elect.jee.presentation.dynamicform.Property;

@GroupedConversationScoped
@ConversationGroup(AbstractWahlausschussmitgliedSearchParameters.class)
public class WahlausschussmitgliedSearchParameters extends AbstractWahlausschussmitgliedSearchParameters {

  private static final long serialVersionUID = 1L;

  private Gebiet gebiet;

  private Wahlausschussmitglied wahlausschussmitglied;

  private WahlausschussmitgliedVerterterFilterKriteriumProperty verterterFilterKriteriumProperty;

  public WahlausschussmitgliedSearchParameters() {
    super();
  }

  public Gebiet getGebiet() {
    return gebiet;
  }

  public void setGebiet(Gebiet gebiet) {
    this.gebiet = gebiet;
  }

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

    setGebiet(event.getNeueEntity());
  }

  public Wahlausschussrolle getWahlausschussrolle() {
    return getWahlausschussmitglied().getWahlausschussrolle();
  }

  public Property getWahlausschussrolleProperty() {
    Property property = getWahlausschussmitgliedProperties().getWahlausschussrolleMitLeererAuswahlProperty();
    property.setRequired(false);

    return property;
  }

  public WahlausschussmitgliedVerterterFilterKriteriumProperty getVerterterFilterKriteriumProperty() {
    if (verterterFilterKriteriumProperty == null) {
      verterterFilterKriteriumProperty = new WahlausschussmitgliedVerterterFilterKriteriumProperty();
    }

    return verterterFilterKriteriumProperty;
  }

  public WahlausschussmitgliedVerterterFilterKriterium getVerterterFilterKriterium() {
    return getVerterterFilterKriteriumProperty().getValue();
  }

  private Wahlausschussmitglied getWahlausschussmitglied() {
    if (wahlausschussmitglied == null) {
      wahlausschussmitglied = new Wahlausschussmitglied(EmptyCustomData.INSTANCE);
    }

    return wahlausschussmitglied;
  }

  private WahlausschussmitgliedProperties getWahlausschussmitgliedProperties() {
    return getWahlausschussmitglied().getProperties();
  }

  @Override
  public void reset() {
    gebiet = null;
    wahlausschussmitglied = null;

    super.reset();
  }
}
