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

import java.util.Collections;
import java.util.List;
import java.util.Set;

import de.ivu.elect.business.benutzerverwaltung.entity.RolleArt;
import de.ivu.elect.business.benutzerverwaltung.entity.RolleConstants;
import org.apache.deltaspike.core.api.scope.ConversationGroup;
import org.apache.deltaspike.core.api.scope.GroupedConversationScoped;

import de.ivu.elect.business.benutzerverwaltung.entity.Rolle;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.jee.presentation.dynamicform.AbstractEnumProperty;
import de.ivu.elect.jee.presentation.dynamicform.Property;


import static java.util.Arrays.asList;

@GroupedConversationScoped
@ConversationGroup(AbstractRolleSearchParameters.class)
public class RolleSearchParameters extends AbstractRolleSearchParameters {

  private static final long serialVersionUID = 1L;

  private Rolle rolle;

  private RolleArt rolleArt = RolleArt.FACHLICH;

  private Mandant mandant;

  private Set<UseCasePermission> vorhandeneRechte = Collections.emptySet();


  public RolleSearchParameters() {
    super();
  }

  protected Rolle getRolle() {
    if (rolle == null) {
      rolle = new Rolle();
    }
    return rolle;
  }

  public String getName() {
    return getRolle().getName();
  }

  public String getBeschreibung() {
    return getRolle().getBeschreibung();
  }

  public Property getNameProperty() {
    return getRolle().getProperties().getNameProperty();
  }

  public Property getBeschreibungProperty() {
    return getRolle().getProperties().getBeschreibungProperty();
  }

  public void setRolle(Rolle rolle) {
    this.rolle = rolle;
  }

  public Mandant getMandant() {
    return mandant;
  }

  public void setMandant(Mandant mandant) {
    this.mandant = mandant;
  }

  public Set<UseCasePermission> getVorhandeneRechte() {
    return vorhandeneRechte;
  }

  public void setVorhandeneRechte(Set<UseCasePermission> vorhandeneRechte) {
    this.vorhandeneRechte = vorhandeneRechte;
  }

  @Override
  public void reset() {
    super.reset();
    rolle = null;
    mandant = null;
    rolleArt = RolleArt.FACHLICH;
    vorhandeneRechte = Collections.emptySet();
  }

  public RolleArt getRolleArt() {
    return rolleArt;
  }

  public void setRolleArt(RolleArt rolleArt) {
    this.rolleArt = rolleArt;
  }

  public Property getRolleArtProperty() {
    return new AbstractEnumProperty<RolleArt>() {
      @Override
      public List<RolleArt> getValues() {
        return asList(RolleArt.values());
      }

      @Override
      public RolleArt getValue() {
        return getRolleArt();
      }

      @Override
      public void setValue(RolleArt rolleArt) {
        setRolleArt(rolleArt);
      }

      @Override
      public String getDefaultLabel() {
        return getMessage(RolleConstants.MESSAGE_KEY_ROLLE_ART_EINZAHL);
      }

      @Override
      public boolean getDefaultRequired() {
        return false;
      }

      @Override
      protected Class<RolleArt> getEnumClass() {
        return RolleArt.class;
      }

      @Override
      public boolean hasNoSelectionItem() {
        return true;
      }
    };
  }
}
