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

import java.util.Date;

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

import de.ivu.elect.business.datei.entity.DateiExport;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
import de.ivu.elect.business.person.entity.Geschlecht;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenProperties;
import de.ivu.elect.jee.presentation.dynamicform.Property;
import de.ivu.elect.jee.presentation.dynamicform.converter.AutoFormatDateTimeConverter;

@GroupedConversationScoped
@ConversationGroup(AbstractPersonendatenDateiExportSearchParameters.class)
public class PersonendatenDateiExportSearchParameters extends AbstractPersonendatenDateiExportSearchParameters implements SearchParametersMitPersonendaten {

  private static final long serialVersionUID = 1L;

  private Personendaten personendaten;

  private DateiExport dateiExport;

  public PersonendatenDateiExportSearchParameters() {
    super();
  }

  public boolean hasPersonendatenPersistent() {
    return getPersonendaten() != null && getPersonendaten().isPersistent();
  }

  public Personendaten getPersonendaten() {
    return personendaten;
  }

  public void setPersonendaten(Personendaten personendaten) {
    this.personendaten = personendaten;
  }

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

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

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

    return property;
  }

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

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

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

    return property;
  }

  @Override
  public Date getGeburtsdatum() {
    return getPersonendaten().getGeburtsdatum();
  }

  @Override
  public void setGeburtsdatum(Date geburtsdatum) {
    getPersonendaten().setGeburtsdatum(geburtsdatum);
  }

  @Override
  public Property getGeburtsdatumProperty() {
    Property property = getPersonendatenProperties().getGeburtsdatumProperty();
    property.setConverter(new AutoFormatDateTimeConverter(true)); // ELECTMUC-2429
    property.setRequired(false);

    return property;
  }

  @Override
  public Geschlecht getGeschlecht() {
    return getPersonendaten().getGeschlecht();
  }

  @Override
  public void setGeschlecht(Geschlecht geschlecht) {
    getPersonendaten().setGeschlecht(geschlecht);
  }

  @Override
  public Property getGeschlechtProperty() {
    Property property = getPersonendatenProperties().getGeschlechtMitLeererAuswahlProperty();
    property.setRequired(false);

    return property;
  }

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

  public DateiExportArt getDateiArt() {
    return getDateiExport().getDateiArt();
  }

  public void setDateiArt(DateiExportArt dateiArt) {
    getDateiExport().setDateiArt(dateiArt);
  }

  private DateiExport getDateiExport() {
    if (dateiExport == null) {
      dateiExport = new DateiExport();
      dateiExport.setDateiArt(null);
    }

    return dateiExport;
  }

  @Override
  public void reset() {
    super.reset();

    personendaten = null;
    dateiExport = null;
  }
}
