
package de.ivu.elect.presentation.personenregister;

import static java.util.Collections.emptyList;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;

import de.ivu.elect.business.anschrift.entity.AnschriftArt;
import de.ivu.elect.business.person.entity.Geschlecht;
import de.ivu.elect.business.person.entity.Sperrmerkmal;
import de.ivu.elect.business.person.entity.Wahlrechtsausschluss;
import de.ivu.elect.business.personenregister.entity.PersonenregisterAnschrift;
import de.ivu.elect.business.personenregister.entity.PersonenregisterPersonendaten;

public class PersonenregisterPersonendatenSearchResultEntry extends AbstractEntityMitPersonendatenSearchResultEntry {

  private static final long serialVersionUID = 1L;

  private final PersonenregisterPersonendaten personenregisterPersonendaten;

  private final List<PersonenregisterAnschrift> personenregisterAnschriften;

  private final PersonenregisterAnschrift personenregisterAnschrift;

  public PersonenregisterPersonendatenSearchResultEntry(PersonenregisterPersonendaten personenregisterPersonendaten) {
    this(personenregisterPersonendaten, emptyList());
  }

  public PersonenregisterPersonendatenSearchResultEntry(PersonenregisterPersonendaten personenregisterPersonendaten, List<PersonenregisterAnschrift> personenregisterAnschriften) {
    super();

    this.personenregisterPersonendaten = personenregisterPersonendaten;

    List<PersonenregisterAnschrift> personenregisterAnschriftenOrDefault = new ArrayList<>(personenregisterAnschriften);
    personenregisterAnschriftenOrDefault.removeIf(Objects::isNull);

    if (personenregisterAnschriftenOrDefault.isEmpty()) {
      personenregisterAnschriftenOrDefault.add(new PersonenregisterAnschrift(AnschriftArt.UNBEKANNT));
    }

    this.personenregisterAnschriften = personenregisterAnschriftenOrDefault;
    this.personenregisterAnschrift = personenregisterAnschriftenOrDefault.get(0);
  }

  @Override
  public String getOrdnungsmerkmal() {
    return personenregisterPersonendaten.getOrdnungsmerkmal();
  }

  @Override
  public Sperrmerkmal getSperrmerkmal() {
    return personenregisterPersonendaten.getSperrmerkmal();
  }

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

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

  @Override
  public String getVornamen() {
    return personenregisterPersonendaten.getVornamen();
  }

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

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

  public Wahlrechtsausschluss getWahlrechtsausschluss() {
    return personenregisterPersonendaten.getWahlrechtsausschluss();
  }

  public AnschriftArt getAnschriftArt() {
    return personenregisterAnschrift.getAnschriftArt();
  }

  @Override
  public String getAnschriftOrt() {
    return personenregisterAnschrift.getOrt();
  }

  @Override
  public String getAnschriftStrassenname() {
    return personenregisterAnschrift.getStrasse();
  }

  @Override
  public String getAnschriftHausnummer() {
    return personenregisterAnschrift.getHausnummer();
  }

  @Override
  public String getAnschriftBuchstabe() {
    return "";
  }

  @Override
  public String getAnschriftZusatz() {
    return personenregisterAnschrift.getHausnummerzusatz();
  }

  public PersonenregisterPersonendaten toPersonenregisterPersonendaten() {
    return personenregisterPersonendaten.newInstance(personenregisterAnschriften);
  }
}
