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

import static java.util.stream.Collectors.toSet;

import java.io.Serializable;
import java.util.Collection;
import java.util.Optional;
import java.util.Set;

import javax.inject.Inject;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.personenregister.control.PersonenregisterPersonendatenMatcher;
import de.ivu.elect.business.personenregister.entity.PersonenregisterPersonendaten;

// ELECTKOM-2725
public class PersonendatenPersonenregisterPersonendatenCollector implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient PersonendatenPersonenregisterPersonendatenMatcherResolver personendatenPersonenregisterPersonendatenMatcherResolver;

  public PersonendatenPersonenregisterPersonendatenCollector() {
    super();
  }

  public Optional<PersonenregisterPersonendaten> findPersonenregisterPersonendatenAutomatischUebernehmbar(Personendaten personendaten,
      Collection<PersonenregisterPersonendaten> personenregisterPersonendaten) {

    if (!personenregisterPersonendaten.isEmpty()) {
      PersonenregisterPersonendatenMatcher matcher = getMatcher(personendaten);

      Set<PersonenregisterPersonendaten> personenregisterPersonendatenAutomatischUebernehmbar = personenregisterPersonendaten.stream() //
          .filter(another -> matcher.isAutomatischUebernehmbar(personendaten, another)) //
          .collect(toSet());

      if (personenregisterPersonendatenAutomatischUebernehmbar.size() == 1) {
        return Optional.of(personenregisterPersonendatenAutomatischUebernehmbar.iterator().next());
      }
    }

    return Optional.empty();
  }

  protected PersonenregisterPersonendatenMatcher getMatcher(Personendaten personendaten) {
    return personendatenPersonenregisterPersonendatenMatcherResolver.getMatcher(personendaten);
  }
}
