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

import de.ivu.elect.business.email.entity.Email;
import de.ivu.elect.business.email.entity.EmailStatusType;
import de.ivu.elect.business.person.boundary.SearchParametersMitPersonendatenNamen;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenProperties;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;
import de.ivu.elect.jee.presentation.dynamicform.Property;
import de.ivu.elect.presentation.email.form.EmailStatusProperty;
import org.apache.deltaspike.core.api.scope.ConversationGroup;
import org.apache.deltaspike.core.api.scope.GroupedConversationScoped;

@GroupedConversationScoped
@ConversationGroup(AbstractEmailSearchParameters.class)
public class EmailSearchParameters extends AbstractEmailSearchParameters implements SearchParametersMitPersonendatenNamen {

  private static final long serialVersionUID = 1L;

  private Email email;

  public EmailSearchParameters() {
    super();
  }

  protected Email getEmail() {
    if (email == null) {
      email = new Email();
      email.setStatus(null);
      email.setPersonendaten(new Personendaten(EmptyCustomData.INSTANCE));
    }
    return email;
  }

  public EmailStatusType getStatus() {
    return getEmail().getStatus();
  }

  public String getEmpfaenger() {
    return getEmail().getEmpfaenger();
  }

  public String getFehlermeldung() {
    return getEmail().getFehlermeldung();
  }

  @Override
  public String getFamilienname() {
    return getEmail().getPersonendaten().getFamilienname();
  }

  @Override
  public void setFamilienname(String familienname) {
    getEmail().getPersonendaten().setFamilienname(familienname);
  }

  @Override
  public String getVorname() {
    return getEmail().getPersonendaten().getRufname();
  }

  @Override
  public void setVorname(String vorname) {
    getEmail().getPersonendaten().setRufname(vorname);
  }

  public Property getStatusProperty() {
    return new EmailStatusProperty(getEmail());
  }

  public Property getEmpfaengerProperty() {
    return getEmail().getProperties().getEmpfaengerProperty();
  }

  public Property getFehlermeldungProperty() {
    return getEmail().getProperties().getFehlermeldungProperty();
  }

  @Override
  public Property getFamiliennameProperty() {
    Property property = getPersonendatenProperties().getFamiliennameProperty();
    property.setRequired(false);
    return property;
  }

  @Override
  public Property getVornameProperty() {
    Property property = getPersonendatenProperties().getRufnameProperty();
    property.setRequired(false);
    property.setLabel(getMessage(SearchParametersMitPersonendatenNamen.MESSAGE_KEY_VORNAME_EINZAHL));
    return property;
  }

  private PersonendatenProperties getPersonendatenProperties() {
    return getPersonendaten().getProperties();
  }

  private Personendaten getPersonendaten() {
    return getEmail().getPersonendaten();
  }
}
