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

import java.util.Collection;

import javax.inject.Named;

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

import de.ivu.elect.business.gruppe.entity.GruppeArt;
import de.ivu.elect.business.wahl.entity.Wahl;


import static java.util.Arrays.asList;

@Named(GruppeSearchParameters.COMPONENT_NAME)
@GroupedConversationScoped
@ConversationGroup(AbstractGruppeSearchParameters.class)
public class GruppeSearchParameters extends AbstractGruppeSearchParameters {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "gruppeSearchParameters";

  private Wahl wahl;

  private GruppeArtOption gruppeArtOption = GruppeArtOption.ALLE;

  public GruppeSearchParameters() {
    super();
  }

  public Wahl getWahl() {
    return wahl;
  }

  public void setWahl(Wahl wahl) {
    this.wahl = wahl;
  }

  public GruppeArtOption getGruppeArtOption() {
    return gruppeArtOption;
  }

  public void setGruppeArtOption(GruppeArtOption gruppeArtOption) {
    this.gruppeArtOption = gruppeArtOption;
  }

  public Collection<GruppeArtOption> getGruppeArtOptions() {
    return asList(GruppeArtOption.values());
  }

  public Collection<GruppeArt> getGruppeArten() {
    return gruppeArtOption.getGruppeArten();
  }

  public enum GruppeArtOption {
    PARTEI_WAEHLERGRUPPE_VEREINIGUNG(GruppeArt.PARTEI, GruppeArt.WAEHLERGRUPPE, GruppeArt.VEREINIGUNG),
    PARTEI_WAEHLERGRUPPE(GruppeArt.PARTEI, GruppeArt.WAEHLERGRUPPE),
    VEREINIGUNG(GruppeArt.VEREINIGUNG),
    EINZELBEWERBER(GruppeArt.EINZELBEWERBER),
    REFERENDUM_VORLAGE(GruppeArt.REFERENDUM_VORLAGE),
    SYSTEM_GRUPPE(GruppeArt.SYSTEM_GRUPPE),
    ALLE(GruppeArt.values());

    private final Collection<GruppeArt> gruppeArten;

    private GruppeArtOption(GruppeArt... gruppeArten) {
      this.gruppeArten = asList(gruppeArten);
    }

    public Collection<GruppeArt> getGruppeArten() {
      return gruppeArten;
    }

    public String getLabelKey() {
      return GruppeSearchParameters.class.getSimpleName() + "." + getClass().getSimpleName() + "." + name();
    }
  }
}
